使用selenium的waitForCondition和xpath

Mat*_*ard 6 javascript selenium

Selenium对通过xpath在页面中查找元素提供了很好的支持

selenium.isElementPresent("//textarea")

在ajax页面中,您可以使用waitForCondition在页面上等待,直到出现某些内容

selenium.waitForCondition("some_javascript_boolean_test_as_a_string", "5000")

我的困难是,我似乎无法使用xpath支持进行布尔测试.document.getElementById似乎工作正常,但selenium.isElementPresent没有.

有没有简单的方法从waitForCondition的第一个参数中访问selenium的xpath元素查找功能?

小智 8

更直接的方法是:

selenium.waitForCondition("selenium.isElementPresent(\"xpath=//*[@id='element_id_here']/ul\");", time_out_here);
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以这样做:

selenium.waitForCondition(
    "var x = selenium.browserbot.findElementOrNull('elementIdOrXPathExpression');"
  + "x != null && x.style.display == 'none';", "5000");
Run Code Online (Sandbox Code Playgroud)

waitForCondition只是将最后一个js表达式结果计算为布尔值,从而允许您编写复杂的测试(如此处所示).例如,我们也使用这种技术来测试jQuery AJAX是否已经完成执行.

唯一的缺点是你现在也依赖于browserbot和更低级别的核心js API.


kro*_*old 3

如果你想通过 id 选择一个元素,最简单的就是使用直接的 Selenese:

 isElementPresent("textarea")
Run Code Online (Sandbox Code Playgroud)

如果你坚持使用 xpath 你可能不得不使用

isElementPresent("//*[@id='textarea']")
Run Code Online (Sandbox Code Playgroud)

或者

isElementPresent("//id('textarea')")
Run Code Online (Sandbox Code Playgroud)

(id函数可能不跨浏览器兼容)

如果这没有帮助,您的 html 文档也可能存在导致这种情况发生的结构问题。运行 html 验证器(如html 验证器)来检查页面上的嵌套问题和类似问题。