Выберите элемент, у предка которого есть дочерний элемент, с помощью кнопки

#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. Может быть, я не совсем ясно понял, чего вы пытаетесь достичь?