Есть ли способ щелкнуть переключатель радиокомпонента Blueprintjs при выполнении автоматического теста с использованием CucumberJS и Selenium?

#reactjs #selenium-webdriver #cucumberjs #blueprintjs

#reactjs #selenium-webdriver #cucumberjs #blueprintjs

Вопрос:

Я провожу тестирование автоматизации с использованием CucumberJS с Selenium Webdriver. Я пытаюсь щелкнуть переключатель в форме, используя этот фрагмент кода :

 try {
  let gender = driver.findElement(By.css("input[type=radio][value=Miss.]"))
  gender.click()
  driver.sleep(7000)
} catch (ex) {
  console.log(ex)
}
  

Это мой код реакции с использованием библиотеки Blueprint :

 <RadioGroup>
                  <Radio id="radio-gender-1" label="Mr." value="Mr." checked={this.state.title === "Mr."} />
                  <Radio id="radio-gender-2" label="Miss." value="Miss." checked={this.state.title === "Miss."} />
</RadioGroup>
  

Но когда я запускаю тест, он выдает ошибку с указанием:

Предупреждение о необработанном promiserejectionwarning: InvalidSelectorError: недопустимый селектор: был указан недопустимый или нелегальный селектор.

Я могу заполнить текстовые поля в форме, но не могу нажать на переключатель.

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

Ответ №1:

Вы не заключили значения атрибутов в кавычки в вашем CSS-селекторе. Это должно быть

 input[type='radio'][value='Miss.']
  

Но у вас есть идентификатор, поэтому я не уверен, почему вы не используете его вместо

 By.id("radio-gender-2")
  

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

1. Я пытался сделать это с помощью By.id () но это выдавало ошибку. После попытки вашего предложения он по-прежнему выдает ошибку » Элемент <идентификатор ввода=»radio-gender-2″ name =» Blueprint2.RadioGroup-0" type="radio" value="Miss."> is not clickable at p oint (382, 325). Other element would receive the click: <span class="bp3-control-indicator"></span> »

2. Это означает, что существует SPAN , указанный в сообщении об ошибке, который блокирует щелчок. Обновите опубликованный вами HTML-код, чтобы включить в него не только те INPUT файлы, которые у вас уже есть, но и те, SPAN о которых говорится в сообщении об ошибке. Похоже, вам нужно щелкнуть справа SPAN .

3. Я использую радиокомпонент из библиотеки BlueprintJS. Диапазон виден в режиме отладки, HTML-код — это именно то, что я привел здесь. И я попытался щелкнуть по промежутку, но он не работает.

4. Я не смогу вам помочь, если вы не разместите больше HTML. Добавьте то, SPAN на что ссылается ошибка, и включите то, INPUT на что вы пытаетесь нажать.

Ответ №2:

BlueprintJS, похоже, добавляет наложение на переключатели, чтобы придать им стиль. Это приводит к тому, что Selenium не может правильно щелкнуть переключатель.

Решение, которое я нашел, — щелкнуть фактическое наложение, а не ввод, для этого я использовал этот селектор:

 # By.css("#inputId   .bp3-control-indicator")