如何使用waitForCondition()

时间:2010-11-08 20:58:55

标签: java eclipse selenium selenium-rc

美好的一天,

我是selenium的新手,我正在尝试编写一个简单的测试。我想测试我的AJAX功能,所以我认为waitForCondition()方法适合我。问题是,我每次都会收到错误,说'testLoop'没有定义。我的测试很简单:

@Test
public void firstTest() 
{
    selenium.open(BASE_URL);
    assertTrue(selenium.isElementPresent("css=a#performAjax"));
    selenium.click("link=Add some content!");
    String script = "selenium.browserbot.getCurrentWindow().document.getElementByClassName('ajaxMessage').length > 0";
    selenium.waitForCondition(script, "10000");
    Assert.assertEquals(selenium.getText("css=div.ajaxMessage"), "You got me with AJAX!");
}

但是每次我运行它,我都会收到错误:

com.thoughtworks.selenium.SeleniumException: ERROR: Command execution failure. Please search the forum at http://clearspace.openqa.org for error details from the log window. The error message is: testLoop is not defined

我搜索过论坛等等,但是到目前为止我没有找到任何帮助。任何提示都表示赞赏。

关于更好的编写硒测试方法的其他提示也很受欢迎,但我的主要目标是解决这个错误:)

如果有人想知道,是的,我已经确认在调用waitForCondition()期间抛出了错误。

1 个答案:

答案 0 :(得分:4)

进行了一些搜索!对于任何想知道的人......

评论this post的用户提到waitForCondition()扩展的当前实现与当前版本的selenium不同步。必须更新user-extensions.js文件,以使用'TestLoop'替换'testLoop'的所有实例。

如果你像我一样将selenium-rc作为外部jar导入到Eclipse中,这就是解压缩jar,编辑js文件并将其重新压缩到jar中的问题。

<强>更新

经过进一步研究,似乎waitForElementPresent()是执行此操作的首选方法,因为您只需指定一个定位器而不是评估JavaScript表达式。还有waitForTextPresent()和其他等价物。

这些AJAX方法不存在于selenium-rc中的.jar文件中。它们在Selenium-IDE中可用,如果将这些测试导出到Java,您将看到它只是创建一个默认超时为60秒并检查isElementPresent()的循环。

如果你更喜欢严格地从Java驱动模式工作,你可以创建一些帮助来为你完成这项工作,因为解压缩jar,修改用户扩展以及重新压缩jar会变得相当乏味和恼人。 / p>