С таким XPath обычно существует несколько подходов, которые будут работать. Вот как я подхожу к локаторам вот так.
Я пытаюсь найти элемент, который является родительским для обоих элементов, на которые мне нужно сослаться, элемент, содержащий текст, который я ищу, 'goregaon-vashi', а затем ссылку Удалить. Если вы посмотрите на HTML, вы увидите, что оба эти элемента находятся в одной строке таблицы, TR
. Поскольку два нужных элемента не находятся в одной и той же ветви DOM, нам нужно найти TR
, который содержит один элемент, а затем перейти вниз по другой ветви DOM к ссылке Удалить.
Сначала мы находим TR
с тегом A
, который содержит текст 'goregaon-vashi'. Если бы все, что мы хотели - это ссылка «goregaon-vashi», XPath выглядел бы как
//tr//a[.='goregaon-vashi']
Чтобы вернуть TR
, нам нужно немного изменить XPath на
//tr[.//a[.='goregaon-vashi']]
^ ^
these extra braces indicate the property that the `TR` should contain
Если вы запустите только это, вы увидите, что он возвращает родительский элемент TR
... именно то, что мы хотим для этого шага. На следующем шаге мы идем вниз по DOM к ссылке Удалить из TR
, найденного на первом шаге.
//tr[.//a[.='goregaon-vashi']]//a[.='Delete']
^ this starts the new part
Если вы знакомы с XPath, это должно показаться вам знакомым. Это простой поиск на любом уровне //
с поиском тега A
, который содержит точный текст «Удалить».
Надеюсь, это имеет смысл. Я проверил это на HTML, который вы разместили, и он вернул правильный элемент.