【问题标题】:Selenium: Not able to understand xPathSelenium:无法理解 xPath
【发布时间】:2010-12-14 12:32:46
【问题描述】:

我有一些这样的 HTML:

<h4 class="box_header clearfix">
<span>
<a rel="dialog" href="http://www.google.com/?q=word">Search</a>
</span>
<small>
<span>
<a rel="dialog" href="http://www.google.com/?q=word">Search</a>
</span>
</h4>

我正在尝试使用 Selenium 在 Java 中获取 href。我尝试了以下方法:

selenium.getText("xpath=/descendant::h4[@class='box_header clearfix']/");
selenium.getAttribute("xpath=/descendant::h4[@class='box_header clearfix']/");

但这些都不起作用。它一直抱怨我的 xpath 无效。谁能告诉我我做错了什么?

【问题讨论】:

  • 如果您已升级到 Selenium 2 并且正在使用 ASP.NET Web 窗体(看起来就是这样),您可能会从一些帮助类中受益。 foliotek.com/devblog/…

标签: html selenium screen-scraping automated-tests


【解决方案1】:

您应该使用 getAttribute 来获取链接的 href。您的 XPath 需要对最终节点的引用以及所需的属性。以下应该有效:

selenium.getAttribute("xpath=/descendant::h4[@class='box_header clearfix']/a@href");

您还可以修改您的 XPath,使其更改更加灵活,甚至使用 CSS 来定位元素:

//modified xpath
selenium.getAttribute("//h4[contains(@class,'box_header')]/a@href");

//css locator
selenium.getAttribute("css=.box_header a@href");

【讨论】:

  • @Dave & @Legend:如果您关心测试的速度,我的建议是避免使用这种灵活的 xpath 表达式(使用 // 和类似的)。原因是 Selenium 默认使用一个 非常 慢的 javascript XPath 库(我在这里谈论的是几秒钟),特别是如果它需要遍历整个 HTML 文档才能找到某些东西。
  • @Igor 这是一种平衡,允许您的应用程序在没有测试失败的情况下进行一些更改,并且您的测试运行得更快。我通常不喜欢在应用程序更改之间修复测试,所以不要介意 XPath 需要更长的时间。当然,您也可以使用更快且(通常)更灵活的 CSS 定位器。 :)
  • 感谢您的建议。这只是对测试应用程序的测试,所以我会记住这一点。 id 和类名几乎是动态生成的,所以最后我只剩下 XPath...
【解决方案2】:

过去我在使用 Selenium 和 xpath 时遇到过类似的问题,并且无法真正解决它(除了更改表达式)。只是为了确保我建议您使用 Firefox 的 XPath Checker 插件尝试您的 xpath 表达式。

【讨论】:

  • 谢谢。我将安装它并检查它只是为了确保我在正确的路径上,我是否将 XPath 与 selenium 一起正确使用?我的意思是我应该使用哪一个:getText 还是 getAttribute?
猜你喜欢
  • 2023-03-06
  • 2021-12-08
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多