使用selenium的waitForCondition和xpath

时间:2009-06-16 02:54:58

标签: 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元素查找功能?

3 个答案:

答案 0 :(得分:8)

更直接的方法是:

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

答案 1 :(得分:5)

你可以这样做:

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

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

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

答案 2 :(得分:3)

如果你想按id选择一个元素,最简单的方法是使用直的selenese:

 isElementPresent("textarea")

如果您坚持使用xpath,则可能必须使用

isElementPresent("//*[@id='textarea']")

isElementPresent("//id('textarea')")

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

如果这对您的HTML文档没有帮助,也可能会出现导致此问题发生的结构性问题。运行像html validator这样的html验证程序来检查页面上的嵌套问题和类似问题。