【发布时间】:2013-06-17 10:08:41
【问题描述】:
我正在为我们的 Web 应用程序编写一些测试。当我在 Firefox XPath-Checker 插件中使用这个 XPath 时,它工作得很好:
//div[contains(@class, "my-class") and @data-custom-attr="id")]
但是如果像这样在 selenium 代码中使用它:
(new WebDriverWait(driver, MAX_TIMEOUT_FOR_ELEMENT_LOADING_IN_SECONDS)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(@class, \"my-class\") and @data-custom-attr=\"id\")]"));
抛出超时异常。
为什么 xpath 查询直接在浏览器中起作用,而在 selenium 测试中不起作用?是否有关于我必须考虑的文件?
作为旁注:如果我使用确切的路径 /html/body/div/... 等,它确实有效。我上面的示例中的 css 选择器挂件也不起作用。
【问题讨论】:
-
我们需要查看您正在测试的页面的副本,或者针对面向公众的网站运行此副本。您总是可以将该 XPath 弹出到 Selenium IDE 中并查看它的作用。它在 IFrame 中吗?
-
也许问题不在于定位元素 - 而是时间。
MAX_TIMEOUT_FOR_ELEMENT_LOADING_IN_SECONDS的值是多少?元素出现的时间是否足够? -
10 秒绰绰有余。当我在本地浏览器上运行它时,我看到了该元素。
-
在我看来,Selenium 中的 XPath-Parser 被我的属性名称中的“-”所困扰。如果我在 FF 的 Xpath-Plugin 中运行没有任何问题的查询,它可以工作,如果我在 Selenium IDE 或我的 Java Selenium 测试中这样做,它会失败。