我尝试使用xPath查找包含一段文字的元素,但我无法让它工作....
WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]"));
如果我使用" contains"删除最后一位它,它找到我的span元素,但我需要根据文本内容选择它。它不会是一个完美的匹配'有些文字'或者,因为它也可能包含截断的字符串。
有人看到了这个问题吗?
答案 0 :(得分:36)
我认为问题在于:
[contains(text()='Some text')]
要打破这种局面,
[]
是对每个节点进行操作的条件
该节点集 - 您的案例中的每个span节点。如果它运行的任何单个节点匹配它
匹配括号内的条件。 text()
是一个选择器
匹配作为上下文子级的所有文本节点
node - 它返回一个节点集。 contains
是一个可以运作的功能
在一个字符串上。如果传递了节点集,则节点集为converted
into a string by returning the string-value of the node in the
node-set that is first in document order。您应该尝试将其更改为
[text()[contains(.,'Some text')]]
外部[]
是对每个单独节点进行操作的条件
在该节点集text()
是一个匹配所有文本的选择器
作为上下文节点的子节点的节点 - 它返回一个节点
集。
内部[]
是对其中的每个节点进行操作的条件
节点集。
contains
是一个对字符串进行操作的函数。在这里通过了
单个文本节点(.
)。
答案 1 :(得分:12)
使用此
//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text(),'Some text')]
OR
//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(.,'Some text')]
答案 2 :(得分:3)
@FindBy(xpath = "//button[@class='btn btn-primary' and contains(text(), 'Submit')]") private WebElementFacade submitButton;
public void clickOnSubmitButton() {
submitButton.click();
}
答案 3 :(得分:-4)
@FindBy(xpath = "//span[@class='y2' and contains(text(), 'Your Text')] ")
private WebElementFacade emailLinkToVerifyAccount;
这种方法对您有用,希望如此。