Selenium и xPath - поиск ссылки с помощью текста

Я пытаюсь использовать xPath для поиска элемента, содержащего фрагмент текста, но я не могу заставить его работать.

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

Если я удаляю последний бит с помощью "содержит", он находит элемент span, но мне нужно выбрать его на основе содержимого текста. Это не будет идеальным сочетанием "Некоторого текста", потому что оно также может содержать усеченные строки.

Кто-нибудь видит проблему?

Ответы

Ответ 1

Я думаю, проблема здесь:

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

Чтобы сломать это,

  • [] - это условие, которое работает на каждом отдельном node в что node установите - каждый диапазон node в вашем случае. Он соответствует, если какой-либо из отдельных узлов, с которыми он работает на соответствие условиям внутри скобок.
  • text() является селектором , который соответствует всем текстовым узлам, являющимся дочерними элементами контекста node - он возвращает набор node.
  • contains - это функция, которая работает на строке. Если он передан node, набор node преобразован в строку, возвращая строковое значение node в node -set, который является первым в заказе документа.

Вы должны попытаться изменить это на

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

  • Внешний [] является условным, который работает на каждом отдельном node в том, что node set text() - селектор, который соответствует всему тексту узлы, являющиеся дочерними элементами контекста node - он возвращает node набор.

  • Внутренний [] является условным, который работает на каждом node в том, что node.

  • contains - это функция, которая работает с строкой. Здесь он передается отдельный текст node (.).

Ответ 2

Используйте этот

//*[@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')]

Ответ 3

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

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

Ответ 4

@FindBy(xpath = "//span[@class='y2' and contains(text(), 'Your Text')] ") 
private WebElementFacade emailLinkToVerifyAccount;

Этот подход будет работать для вас, надеюсь.