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

joa*_*erg 18 selenium xpath selenium-webdriver

我正在尝试使用xPath来查找包含一段文本的元素,但我无法让它工作....

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

如果我用"包含"的东西删除最后一位,它会找到我的span元素,但我需要根据文本内容选择它.它也不会是'Some text'的完美匹配,因为它也可能包含截断的字符串.

有谁看到这个问题?

dnl*_*crl 43

我认为问题在于:

[contains(text()='Some text')]
Run Code Online (Sandbox Code Playgroud)

打破这个,

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

您应该尝试将其更改为

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

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

  2. 内部[]是对该节点集中的每个节点进行操作的条件.

  3. contains是一个对字符串进行操作的函数.这里传递一个单独的文本节点(.).


Uma*_*iri 13

用这个

//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text(),'Some text')]
Run Code Online (Sandbox Code Playgroud)

要么

//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(.,'Some text')]
Run Code Online (Sandbox Code Playgroud)