【问题标题】:Can't find unique xpath for clickable element找不到可点击元素的唯一 xpath
【发布时间】:2019-07-17 01:56:29
【问题描述】:

我正在尝试获取 xpath,以便我可以单击下面的 href 链接:

<div id="viewIFL" style="">            
    <div class="moneycentrallink">
        Track your cash in one place with 
        <a href="/abc1/1/7979879yih9y9haidhyhw9y989y9/goto/feature/icflink?navigator=2" target="_top" xpath="2">Money Central</a>
    </div>
</div>

当我在 ChroPath 中使用以下内容时:

//a[contains(text(),'Money Central')]

它返回与 xpath="1" 和 xpath="2" 匹配的 2 个元素。

然后我尝试了:

//a[contains(text(),'Money Central') and @xpath='2']

起初它只找到了 1 个元素,但当我再次尝试搜索时,它返回了 0 个元素。这也不能通过 Selenium 工作(返回无法找到元素)。

任何想法发生了什么以及如何找到可点击元素的唯一 xpath?谢谢

【问题讨论】:

  • 总是选择第一个匹配项怎么样? //a[contains(text(),'Money Central')][1]
  • 抱歉忘了提我也试过了,但它仍然返回找到的 2 个元素。
  • 这个怎么样? //div[@class='moneycentrallink']/a[contains(text(),'Money Central')][1]
  • 刚刚在 chropath 中检查过,它仍然返回找到的 2 个元素。通过 Selenium 检查并找不到元素。
  • 你能试试这个 //a[contains(text(),'Money Central')]/@href 并把结果发给我

标签: selenium xpath chropath


【解决方案1】:

不要在 xpath 中使用 xpath 属性,因为 ChroPath 在元素中添加 xpath 属性以告诉用户该元素的匹配项。例如 - 如果 ChroPath 添加了 xpath=5,即此元素是相应 xpath 的第 5 个元素。 对于您的场景,请检查元素并查看 ChroPath 给出的相对 xpath。 你也可以试试 //div[contains(text(),'Track your cash')]//a[contains(text(),'Money Central')]

【讨论】:

    【解决方案2】:

    您的问题表述不当。

    *[1]/*[4]/*[1]/*[2] 形式的元素始终存在唯一路径。问题是这条路径不是很有用,因为它只有在您确切知道文档中的内容时才有效,并且如果您确切知道文档中的内容,则不需要 XPath 来查找它。

    因此,您实际上是在寻找可以处理一组可能的文档的 XPath,其中一些部分是已知的(固定的),而另一些是未知的(可变的)。要找到适用于该集合中每个文档的 XPath,您需要定义已知和未知的内容。看一个示例文档并不能告诉你这一点。

    【讨论】:

      猜你喜欢
      • 2022-12-17
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2019-05-30
      • 2016-06-08
      • 2018-08-30
      相关资源
      最近更新 更多