【问题标题】:Selenium says invalid xpath locatorSelenium 说无效的 xpath 定位器
【发布时间】:2016-01-20 18:29:18
【问题描述】:

我正在尝试获取 HREF 属性的值,但它总是显示不正确的 Xpath。

HTML代码:

我正在尝试代码:

     WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]/thead/tbody/tr/td/a"));
     System.out.println(Link.getAttribute("href"));

我尝试了许多 xpath,但都没有成功。

【问题讨论】:

  • 1) 不应该是://table[contains(@class,'display')]/tbody/tr/td/a? 2) 可能还有其他元素与该表达式匹配,你确定你已经解决了正确的元素吗? 3) 谁说不正确的 Xpath 以及如何(即更多错误细节)? 4)请显示使用代码,您尝试从 href 属性获取值。
  • 请发布 HTML。
  • 我同意之前的评论,这里是他们所说的摘要:stackoverflow.com/help/mcve
  • @DmytroPastovenskyi - 我不能。但是 Würgspaß 给出的 xpath 对我有用。
  • 请注意,Stackoverflow 要求问题包含有关问题的所有必要信息作为文本(即不在图像中)。在这种情况下,您的问题缺少 HTML 源文档。如果你不添加它,你的问题很可能会被关闭。

标签: java xpath selenium-webdriver


【解决方案1】:

这应该可行:

 WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]/tbody/tr/td/a"));

说明:tbody 没有嵌套在thead 中。

请注意,像这样的路径表达式可以按文档顺序返回一组多个节点。 findElement 方法只返回第一个结果节点。所以:如果您要查找的 a 元素不再是此表中的第一个元素,则路径表达式会中断。

如果 href 是唯一的,这样的事情就不容易出错:

 WebElement Link = driver.findElement(By.xpath("//table[contains(@class,'display')]//a[@href='/admin/client/product_overrides/edit/242625']"));

【讨论】:

  • 第一个表达式如何依赖于行的顺序?在我看来,您的意思是说第一个表达式取决于隐含的假设,即结果集中的第一个节点将是想要的节点,因为findElement 只返回第一个结果。
  • @MathiasMüller 是的,这就是我的意思。如果页面代码发生更改并且其他一些 a 元素恰好是第一个出现在表格正文中的元素,则测试可能会失败。随意编辑答案,指出它。
  • 在您的许可下编辑 - 未经您的许可投了赞成票 :-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2011-05-19
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多