#java #selenium #selenium-webdriver
#java #selenium #selenium-webdriver
Вопрос:
Например,
У нас есть следующий HTML :
<li class="gcui-menu-item tsc-dr-tree-item">1</li>
<li class="gcui-menu-item tsc-dr-tree-subitem">1-1</li>
<li class="gcui-menu-item tsc-dr-tree-subitem">1-2</li>
<li class="gcui-menu-item tsc-dr-tree-item">2</li>
<li class="gcui-menu-item tsc-dr-tree-subitem">2-1</li>
ПРИМЕЧАНИЕ: Текст, содержащийся в li
s, на самом деле не присутствует на странице, они присутствуют в виде меток, помогающих объяснить проблему.
Здесь я хотел бы получить подпункты ‘1-1’ и ‘1-2’, только под первым элементом дерева ‘1’.
Если я ищу:
//li[contains(@class, 'tree-item')]//following::li[contains(@class, 'subitem')]
Я также получаю подпункт под вторым элементом дерева, ‘2-1’, поскольку в этой структуре нет дочерних элементов элемента, кроме братьев и сестер.
Итак, есть ли какой-либо способ, которым мы можем действовать, following:: li
пока не достигнем li
элемента? Может быть, following::li
до следующего li
, содержащего «элемент дерева» в своем классе?
Комментарии:
1. Я не понимаю, что именно вы пытаетесь сделать, и, пожалуйста, разместите здесь html вместо фотографии.
2. Я изменил формулировку вашего вопроса, основываясь на том, что, как мне кажется, вы задаете. Пожалуйста, отредактируйте это и исправьте все, что я сделал неправильно.
3. @JeffC Большое спасибо за редактирование моего вопроса, он идеален. Теперь у меня есть идея о том, как я могу объяснить лучше, я улучшу свои вопросы в следующий раз.
Ответ №1:
Вот xpath, который соответствует обоим элементам подпункта li в первом пункте меню.
//li[contains(@class,'tree-item')][1]/following-sibling::li[contains(@class,'tree-subitem') and count(preceding-sibling::li[contains(@class,'tree-item')])=1]
Комментарии:
1. Если вы хотите получить подпункты для 2-го пункта меню, то просто замените позицию
1
на2
в обоих местах. К вашему сведению2. Это не возвращает никаких элементов
3. Я понял, в чем проблема…
menu-subitem
должно бытьtree-subitem
… но он по-прежнему не возвращает нужные элементы. Он возвращает только первый элемент, а не все (2) подпункты.4. возможно, вы ночью обновили последнюю ссылку на класс до ‘tree-item’. Я обновил xpath, основываясь на обновленном сообщении, теперь он должен синхронизироваться с именем класса в соответствии с сообщением.
5. Прохладный. Пожалуйста, примите мой ответ. Я думаю, что сообщение было обновлено после моего первоначального ответа, вот почему я должен отредактировать сообщение с новыми именами классов :-).