代码之家  ›  专栏  ›  技术社区  ›  Matt Sheppard

在xpath中使用selenium的waitForCondition

  •  6
  • Matt Sheppard  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  8
  •   Jeff Mercado    13 年前

    更直接的方法是:

    selenium.waitForCondition("selenium.isElementPresent(\"xpath=//*[@id='element_id_here']/ul\");", time_out_here);
    
        2
  •  5
  •   Jeff Mercado    13 年前

    你可以这样做:

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

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

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

        3
  •  3
  •   krosenvold    16 年前

    如果要按id选择元素,最简单的方法是使用纯selenese:

     isElementPresent("textarea")
    

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

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

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

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

    如果这样做没有帮助,您的html文档可能还存在导致这种情况发生的结构问题。运行类似于 html validator 检查页面上的嵌套问题和类似问题。