代码之家  ›  专栏  ›  技术社区  ›  Samo

如何使用waitForCondition()。

  •  4
  • Samo  · 技术社区  · 14 年前

    很好的一天,

    我对硒是个新手,我正在写一个简单的测试。我想测试我的Ajax功能,所以我认为waitForCondition()方法适合我。问题是,我每次都会得到一个错误,说“testlocop”没有定义。我的测试很简单:

    @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 回复  |  直到 14 年前
        1
  •  4
  •   Samo    14 年前

    又找了几次才成功!对于任何想知道…

    用户评论 this post 提到waitForCondition()扩展的当前实现与Selenium的当前版本不同步。必须更新user-extensions.js文件,以将“testroop”的所有实例替换为“testroop”。

    如果您像我一样将SeleniumRC作为一个外部jar导入Eclipse,这是一个解压缩jar、编辑JS文件并将其重新压缩到jar的问题。

    更新:

    在进一步研究之后,似乎waitForElementPresent()是实现这一点的首选方法,因为您可以简单地指定一个定位器,而不是评估一个javascript表达式。还有waitfortexpresent()和其他等价物。

    使用SeleniumRC得到的.jar文件中不存在这些Ajax方法。它们在硒IDE中可用,如果您将这些测试导出到Java,您将看到它只是创建一个默认超时60秒的循环,并检查IsEntEngestEnter()。

    如果您更喜欢严格地从Java驱动模式工作,您可能可以创建一些助手来为您做这项工作,因为解压缩JAR、修改用户扩展和重新拉链JAR变得相当乏味和烦人。