Xpath предшествующий

#java #html #selenium #xpath

#java #HTML #селен #xpath

Вопрос:

Дерево DOM

 <span lightning-radiogroup_radiogroup="" class="slds-radio_faux"></span>
<span lightning-radiogroup_radiogroup="" class="slds-form-element__label">Yes</span></label>
  

Мой XPath

 //Label[text()='External']//following::fieldset//span[text()='Yes']
  

Дизайн пользовательского интерфейса

введите описание изображения здесь

Я хочу щелкнуть переключатель в приведенном выше пользовательском интерфейсе, мой XPath идеально определил «Да» или «Нет», но, к сожалению, не смог щелкнуть переключатель.

Из моего XPath, как я могу выбрать переключатель на основе значения метки (да, нет)

Комментарии:

1. Обновите вопрос с помощью текстового HTML, включая //Label[text()='External']

Ответ №1:

Проблема в том, что вы выбираете диапазон внутри переключателя.

Вам нужно выбрать узел переключателя. Это был бы узел, подобный этому:

 <input type="radio" name="name" value="NO" >
<label>
    <span lightning-radiogroup_radiogroup="" class="slds-radio_faux">NO</span>
 </label>

 <input type="radio" name="name2" value="Yes">
 <label>
    <span lightning-radiogroup_radiogroup="" class="slds-form-element__label">Yes</span>
 </label>
     

Итак, вам нужен XPath, подобный этому:

 //input[@type="radio"]/span[text()="YES"]/preceding::input
  

Комментарии:

1. Ваше предположение о примере HTML-кода неверно, поскольку у input узла не может быть дочернего элемента / потомка, и поэтому XPath не будет работать

Ответ №2:

Найдите Yes текстовый интервал, а затем найдите его элемент-предок вот он, label затем перейдите к его input элементу с помощью /ancestor::label/input

 "//span[contains(text(), 'Yes')]/ancestor::label/input"
  

это образец HTML:
введите описание изображения здесь

Ответ №3:

Попробуйте

 //span[.='Yes']/preceding-sibling::span[@class='slds-radio_faux']
  

или (скорее всего)

 //span[.='Yes']/preceding::input[@type='radio']