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

时间:2014-04-15 08:28:03

标签: 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')]"));

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

有人看到了这个问题吗?

4 个答案:

答案 0 :(得分:36)

我认为问题在于:

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

要打破这种局面,

  1. []是对每个节点进行操作的条件 该节点集 - 您的案例中的每个span节点。如果它运行的任何单个节点匹配它 匹配括号内的条件。
  2. text()是一个选择器 匹配作为上下文子级的所有文本节点 node - 它返回一个节点集。
  3. contains是一个可以运作的功能 在一个字符串上。如果传递了节点集,则节点集为converted into a string by returning the string-value of the node in the node-set that is first in document order
  4. 您应该尝试将其更改为

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

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

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

    3. 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;

这种方法对您有用,希望如此。