Как искать node путем точного совпадения текста с помощью Xpath в webdriver

Мне нужна небольшая помощь в поиске точного текста с использованием xpath в webDriver.

Предположим, что я имеет html следующим образом.

<html><body>
  <table>
    <tr>
      <td><button>abcd</button></td>
      <td><button>abc</button></td>
    </tr>
  </table>
</body></html>

Теперь я хочу нажать кнопку "abc"

Я использовал xpath как //button[contains(text(),'abc')], но он всегда выступает на кнопке "abcd", так как он также содержит текст "abc" . В этом отношении мне нужен предикат или какая-то другая процедура, которая может искать точный текст вместо текста.

Я также пробовал использовать //button[matches(text(),'abc')], //button[matches($string,'abc')], //button[Text='abc')], //button[.='abc')] и многие другие, но ни одна из них не была разработана для идентификации кнопки "abc" .

Я не знаю, есть ли какие-либо проблемы относительно моей версии xpath, поскольку я не знаю о версии. Но я использую java 1.6 JDK.

Хотя мой точный сценарий не является примером, но должна применяться аналогичная логика.

Следовательно, любая помощь или предложение будут высоко оценены.

Ответ 1

Я бы использовал следующий xpath //button[text()='abc']. Вы упомянули функцию text(), но я не уверен, что синтаксис верен. Также вы пытались использовать contains() - он ищет частичный текст, и WebDriver получает первый найденный элемент. В вашем случае это кнопка <button>abcd</button>

Ответ 2

//button[.="abc"]

Точка перед оператором равенства выполнит сравнение текста. Другой пример - /PROJECT[.="MyProject"] из учебника по Java xPath.

Ответ 3

Попробуйте с концами-вместо вместо них. Если кнопки не имеют уникальных атрибутов, вы можете также добавить родительскую иерархию. Как //table/tr/td [1].

Ответ 4

Чтобы найти элемент 'abcd', вы можете просто использовать:

//button[contains(text(),'abcd')]

Чтобы найти 'abc', используйте функцию normalize-space(), которая очистит ваш текст для сравнения.

//button[normalize-space(text())='abc']

Ответ 5

Для точного поиска:

button[text()='abc']

Для поиска по шаблону:

button[starts-with(.,'abc')]