waitForCondition

description

Waits for any arbitrary condition, by running a JavaScript snippet of your choosing. When the snippet evaluates to "true", we stop waiting.

Use this for your AJAX testing!

  • script: the code to evaluate
  • timeout: the amount of time, in milliseconds, we should wait for your code to run. If the evaluation isn't true after that time, the command will fail.

example of use

waitForCondition var value = selenium.getText("foo"); value.match(/bar/); 3000

This grabs the text out of the "foo" element locator and asserts that it matches a regular expression. If this isn't true within 3 seconds, the test will fail.

using document properties

Since the javascript is executed in the context of the selenium frame/window, you need to use a selenium javascript method to retrieve the original document:

waitForCondition(
   "selenium.browserbot.getCurrentWindow().document.getElementById('btn_forward')",
   10000
)

This code would wait for a maximum of 10 seconds that the HTML element with id "btn_forward" comes into existance.

notes

  • Use this extension with Selenium 0.6.0.
  • This command will fail gracefully if your evaluation throws an exception.
  • This extension overrides part of the selenium-executionloop.js test loop to make the polling method handle thrown exceptions. Ideally, this would get baked into the official next release.

license

This user extension is available under Apache License 2.0. It is Copyright ThoughtWorks, Inc. 2006.

download

waitForCondition_1_0

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Dec 19, 2005

    James Wang says:

    Nice job!I think you can change all "pollUntilConditionIsTrue" into "continueTes...

    Nice job!I think you can change all "pollUntilConditionIsTrue" into "continueTestWhenConditionIsTrue" in the extension then this command can serve for the latest source.

  2. Feb 17, 2006

    Mark Stosberg says:

    Thanks for the contribution! Here's a suggestion to make it even easier to use: ...

    Thanks for the contribution! Here's a suggestion to make it even easier to use: Allow the function in the middle to be an Element, with all the Selenium element locators available to specify it.

    The use case:
    I've made an AJAX call, and am waiting for <div id="newly_appeared"> to appear on the page. I should be able to just say "newly_appeared".

    Perhaps to specify JavaScript, the standard notation should be used for that: javascript

    Unknown macro: {... }

    (I hope that's right, I'm going from memory).