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

问题描述 投票:0回答:5

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

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

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

问题是什么?

selenium xpath selenium-webdriver
5个回答
56
投票

我认为问题出在这里:

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

为了打破这一点,

  1. []
    是在每个单独节点上运行的条件 该节点集——您案例中的每个跨度节点。如果它运行的任何单个节点都匹配 on 匹配括号内的条件。
  2. text()
    是一个选择器 匹配作为上下文子级的所有文本节点 节点——它返回一个节点集。
  3. contains
    是一个运行的函数 在一根绳子上。如果传递一个节点集,则该节点集被转换 通过返回节点中的字符串值将其转换为字符串 文档顺序中第一个节点集

您应该尝试将其更改为

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

  1. 外部

    []
    是在每个单独节点上运行的条件 在该节点集中
    text()
    是一个匹配所有文本的选择器 上下文节点的子节点——它返回一个节点 设置。

  2. 内部

    []
    是对每个节点进行操作的条件 节点集。

  3. contains
    是一个对字符串进行操作的函数。这里就通过了 单个文本节点 (
    .
    )。


14
投票

用这个

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

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

2
投票
@FindBy(xpath = "//button[@class='btn btn-primary' and contains(text(), 'Submit')]") private WebElementFacade submitButton;

public void clickOnSubmitButton() {
    submitButton.click();
}   

0
投票

这对我有用;

By.xpath("//span[contains(text(), 'Your Text')]")

-5
投票

用途:

@FindBy(xpath = "//span[@class='y2' and contains(text(), 'Your Text')] ") 
private WebElementFacade emailLinkToVerifyAccount;
© www.soinside.com 2019 - 2024. All rights reserved.