Selenium Java - как щелкнуть элемент, не имея его идентификатора?

Я пытаюсь установить переключатель по его Xpath или Id. Я проверил элемент с помощью Google Developer Tool и смог получить следующую информацию:

  1. Имя элемента: <label for = "1346_Voltagem_0" class = "dimension-Voltagem espec_0 skuespec_110v skuespec_Voltagem_opcao_110V skuespec_Voltagem_opcao_110v">110V</label>

  2. Xpath: /html/body/div[9]/div/div/div[3]/div[3]/div[1]/div/ul/li[2]/span/label[1]

Я хотел бы знать, как сказать коду, что он должен щелкнуть эту радиокнопку?

кликните сюда для страницы, на которой я хочу щелкнуть radioButton. Кроме того, точный элемент см. На приведенном ниже снимке экрана.

Selenium Java - как щелкнуть элемент, не имея его идентификатора?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
425
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Для этого вы должны использовать xpath, так как вам нужно найти label, а затем найти предыдущий ввод для него.

Вы можете найти этикетку, используя

//div[contains(@class,'prod-sku-selector')]//label[.='110V']

и теперь, чтобы получить предыдущий input, вы можете использовать

//div[contains(@class,'prod-sku-selector')]//label[.='110V']/preceding-sibling::input[1]

css selector

Я всегда считаю, что xpath не должен сильно зависеть от ваших html div и иерархии, поскольку это очень легко потерпеть неудачу даже при малейшем изменении. Итак, используя xPath как "/ html / body / div [9] / div / div / div [3] / div [3] / div [1] / div / ul / li [2] / span / label [1]" "не лучший вариант.

В этом случае я бы посоветовал вам использовать xpath ниже:

Если необходимо щелкнуть первую радиокнопку:

//div[contains(@class, 'prod-sku-selector')]//input[@type='radio'][1]

Если необходимо щелкнуть радиокнопку со значением 110v:

//div[contains(@class, 'prod-sku-selector')]//input[contains(@value, '110V')]

Затем вы можете получить элемент, используя:

radioBtn1 = findElement(By.xpath("//div[contains(@class, 'prod-sku-selector')]//input[@type='radio'][0]"));

Кроме того, вы можете щелкнуть радио в селене, используя:

radioBtn1.click();

Xpath неверен. [0] не является допустимым индексом. Он должен начинаться с [1]. Также вы должны попытаться идентифицировать элемент управления, используя некоторую ссылку, а не только индексы. Потому что, если опция 110V будет отключена, тогда она просто слепо выберет вариант 220V, не вызывая проблем.

Tarun Lalwani 26.03.2018 19:54

См. это. Указанный ранее xpath //div[contains(@class, 'prod-sku-selector')]//input[@type='radio'][0] не работает.

Tarun Lalwani 26.03.2018 20:02

Я обновил указатель в своем ответе. Для второй точки, относящейся к 110 В, это полностью зависит от требований, если необходимо щелкнуть первую радиокнопку, будет работать вышеуказанный параметр, иначе, если необходимо щелкнуть конкретный 110 В, можно использовать следующий xpath: // div [ contains (@class, 'prod-sku-selector')] // input [contains (@value, '110V')]. Весь мотив этой платформы - помогать людям, а не кормить их с ложечки.

Aman Chhabra 26.03.2018 20:07
Ответ принят как подходящий

Избегайте использования абсолютных xpath, поскольку небольшое изменение пользовательского интерфейса приведет к внесению большого количества изменений в ваш код. По вашему вопросу следующие xpaths будут работать.

driver.findElement(By.xpath("//label[text()='110V']")).click();

driver.findElement(By.xpath("//label[contains(@class,'110v')]")).click();

Рад, что это получилось! Пожалуйста, рассмотрите возможность голосования за ответы, если это сработает для вас :)

Dheemanth Bhandarkar 03.04.2018 12:32

Попробуй это:

driver.findElement(By.xpath("//input[@class='skuselector-specification-label input-dimension-Voltagem sku-selector skuespec_110v change-image']")).click();

Другие вопросы по теме