#selenium #xpath
Вопрос:
Я пытаюсь найти элемент, основанный на том, есть ли у его предка дочерний элемент с кнопкой. На странице есть список контейнеров. Эти контейнеры будут иметь один из двух вариантов кнопок, а иногда и вовсе без кнопок. («Присоединиться», «Разъединить» и без кнопки) Мне нужна только ссылка из контейнеров, в которых есть определенная кнопка. Проблема в том, что ссылка имеет только общего предка в контейнере и не является родителем или родным братом.
Следующий XPath возвращает нужную кнопку.
//*[@class='Class2']//*[Class4']//button[text()='Join']
Следующий XPath возвращает все ссылки независимо от кнопки.
//*[@class='Class1']//*[@class='Class3']/a
Я думаю, мне нужно что-то подобное. Но это не дает никаких результатов. Класс 2 является общим предком. И мне все еще нужно отфильтровать кнопку.
//*[@class='Class1']//*/ancestor::div[@class='Class2']/*[@class='Class3']/a
Комментарии:
1. Правильно ли я понимаю, о чем вы просили?
2. Пример HTML, демонстрирующий структуру, будет полезен для понимания того, чего вы хотите достичь, и для того, чтобы иметь возможность протестировать решение
Ответ №1:
В случае, если вы хотите получить все элементы с @class='Class2'
включением в них элементов с @class='Class4'
кнопкой и текстом Join
внутри них, локатор XPath может быть
//*[@class='Class2' and (.//*[@class='Class4']//button[text()='Join'])]
Комментарии:
1. Нет. Этот синтаксис означает, что сам элемент имеет имя класса
Class2
, и внутри него есть элементы, соответствующие//*[@class='Class4']//button[text()='Join']
локатору2. Может быть, я не совсем ясно понял, чего вы пытаетесь достичь?