一尘不染

Selenium和xPath-通过包含文本来定位链接

selenium

我正在尝试使用xPath查找包含一段文本的元素,但我无法使其正常工作…。

WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]"));

如果删除带有“
contains”内容的最后一位,它将找到我的span元素,但是我需要根据文本内容进行选择。它也不是“某些文本”的完美匹配,因为它也可能包含截断的字符串。

有人看到这个问题吗?


阅读 279

收藏
2020-06-26

共1个答案

一尘不染

我认为问题出在这里:

[contains(text()='Some text')]

为了解决这个问题,

  1. []是,在该节点集中每个节点上运行的条件-在你的情况下,每个跨度节点。如果它操作的任何单个节点都匹配括号内的条件,则它匹配。
  2. text() 是一个与上下文节点的子节点的所有文本节点匹配的选择器,它返回一个节点集。
  3. contains是对字符串进行运算的函数。如果将其传递给节点集,则通过返回节点集中按文档顺序首先出现的节点的字符串值,将该节点集转换为字符串

您应该尝试将其更改为

[text()[contains(.,'Some text')]]

  1. 外部[]条件是在该节点集中的每个单独节点上运行的条件,text()是一个选择器,它与作为上下文节点的子级的所有文本节点匹配-它返回一个节点集。

  2. 内部[]条件是在该节点集中的每个节点上运行的条件。

  3. contains是对字符串进行运算的函数。在这里传递了一个单独的文本节点(.)。

2020-06-26