Невозможно щелкнуть по переключателю

#selenium #selenium-webdriver #automated-tests #radio-button #radio-group

#selenium #selenium-webdriver #автоматизированные тесты #переключатель #радиогруппа

Вопрос:

Пожалуйста, я не знаю почему, но я не могу нажать на этот переключатель.

Я пытаюсь с помощью xpath, css, id… но все работает.

Всегда я получаю сообщение об ошибке: нет такого элемента: невозможно найти элемент

И я добавил явное ожидание, но оно все еще не работает.

Теперь я пытаюсь это сделать, но не работает:

WebElement radio = driver.findElement(By.xpath(«//div[@class=’form-inputs-container’]/ul/li[3]/label»));

radio.click();

Мне нужно щелкнуть по нескольким адресам радио на этом веб-сайте:

https://www.turismocity.com.br/

Не могли бы вы мне помочь, пожалуйста?

RadioButton

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

1. можете ли вы предоставить образец html?

Ответ №1:

Похоже, ваш xpath неверен, попробуйте использовать приведенный ниже xpath, он будет работать

//form[@class="tc-form-full-flight"]//label[@for="tt1"]/following-sibling::div

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

Для первого переключателя: //form[@class="tc-form-full-flight"]//label[@for="tt1"]/following-sibling::div

Для второго переключателя: //form[@class="tc-form-full-flight"]//label[@for="tt2"]/following-sibling::div

Для третьей переключающей кнопки: //form[@class="tc-form-full-flight"]//label[@for="tt3"]/following-sibling::div

Надеюсь, это будет полезно!!!

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

1. Мохаммед, у меня это не сработало. Я использовал следующий xpath, и теперь я получил щелчок по радио: //* [@id= ‘flights-tab-container’]/form/div[1]/ul/ li[3]/label . Большое спасибо за вашу помощь!!! Я так благодарен!!!

Ответ №2:

Это должно сработать //input[@id='tt3'] или //input[@value='MultiDestino']

Вы можете оценить xpath в консоли Chrome следующим образом $x("//input[@value='MultiDestino']")

Возвращенный вами xpath пустой []

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

1. Радиш, у меня это не сработало. Я использовал следующий xpath, и теперь я получил щелчок по радио: //* [@id= ‘flights-tab-container’]/form/div[1]/ul/ li[3]/label . Большое спасибо за вашу помощь!!! Я так благодарен!!!

Ответ №3:

Неверный локатор. Более того — даже если бы он был действительным, этот способ поиска элементов ненадежен (вы использовали позицию элемента — [3] в случае изменения порядка локатор будет тормозить). Я предлагаю селектор css:

 input[value='MultiDestino']
  

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

1. Петр, у меня это не сработало. Я использовал следующий xpath, и теперь я получил щелчок по радио: //* [@id= ‘flights-tab-container’]/form/div[1]/ul/ li[3]/label. Большое спасибо за вашу помощь!!! Я так благодарен!!!

Ответ №4:

Для локаторов вы всегда должны начинать с чего-то, что вряд ли изменится. Обычно это идентификаторы, имена и различные другие пользовательские атрибуты в зависимости от сайта. В случае с этим сайтом у каждой из трех переключателей, на которые вы смотрите, есть идентификатор.

Примечание … иногда сайты / страницы не соблюдают стандарты HTML, которые требуют, чтобы идентификатор был уникальным на странице, поэтому, даже если у нужного вам элемента есть идентификатор, всегда проверяйте, чтобы он был уникальным на странице. В этом случае идентификаторы уникальны.

Чтобы щелкнуть переключатель с несколькими назначениями, вы можете использовать приведенный ниже код.

 driver.findElement(By.id("tt3")).click();
  

В некоторых ваших комментариях похоже, что Selenium может испытывать трудности при нажатии на сам ввод, и МЕТКА работает. Если это так, то вы можете немного изменить локатор и использовать приведенный ниже код

 driver.findElement(By.cssSelector("#tt3   label")).click();
  

В приведенном выше CSS-селекторе # означает идентификатор, а — следующий родственный. Для получения дополнительной информации см. Документы W3C.