我正在尝试使用 XPath 来查找包含一段文本的元素,但我无法让它工作......
WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]"));
如果我删除最后一位“包含”内容,它会找到我的 span 元素,但我需要根据文本内容选择它。它也不会是“某些文本”的完美匹配,因为它也可能包含截断的字符串。
问题是什么?
我认为问题出在这里:
[contains(text()='Some text')]
为了打破这一点,
[]
是在每个单独节点上运行的条件
该节点集——您案例中的每个跨度节点。如果它运行的任何单个节点都匹配
on 匹配括号内的条件。 text()
是一个选择器
匹配作为上下文子级的所有文本节点
节点——它返回一个节点集。 contains
是一个运行的函数
在一根绳子上。如果传递一个节点集,则该节点集被转换
通过返回节点中的字符串值将其转换为字符串
文档顺序中第一个节点集。您应该尝试将其更改为
[text()[contains(.,'Some text')]]
外部
[]
是在每个单独节点上运行的条件
在该节点集中 text()
是一个匹配所有文本的选择器
上下文节点的子节点——它返回一个节点
设置。内部
[]
是对每个节点进行操作的条件
节点集。contains
是一个对字符串进行操作的函数。这里就通过了
单个文本节点 (.
)。用这个
//*[@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')]
@FindBy(xpath = "//button[@class='btn btn-primary' and contains(text(), 'Submit')]") private WebElementFacade submitButton;
public void clickOnSubmitButton() {
submitButton.click();
}
这对我有用;
By.xpath("//span[contains(text(), 'Your Text')]")
用途:
@FindBy(xpath = "//span[@class='y2' and contains(text(), 'Your Text')] ")
private WebElementFacade emailLinkToVerifyAccount;