Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как правильно выбрать radio button, если он перерисован на js

codeception
webdriver
Теги: #<Tag:0x00007fedc4523f28> #<Tag:0x00007fedc4523d20>

(Vlad Vitovtsev) #1

Всем доброго времени суток. возник вопрос. Тестирую js валидацию формы используя acceptanceCest. На страницы имеем вот такой радиобатн:

Надо выбрать любой из них. Пробывал использовать и

$I->selectOption('form#reg_form input[name=sex]', 'мужчина'); 

и

 $I->selectOption('form#reg_form input[name=sex]', 'male');. 

ответ всегда один,

[Facebook\WebDriver\Exception\ElementNotVisibleException] element not visible

Подскажите, как правильно выбрать чекнуть такой элемент?


(Vlad Vitovtsev) #2

Помогло вот такое решение

$I->click('form#reg_form>div.row>div.form-group>div.col-sm-6>label.label-input-check');

(Дмитрий Мирошник) #3

Я подозреваю, дело в том, что по данному локатору находится больше, чем 1 элемент. И 1-й, который находится - hidden. Это легко проверить, задав “найти все” (findAll в Selenium), вместо “найти” по этому локатору и посмотреть на количество.


#4

Дело в том Codeception ищет радиобатн по одному из шаблонов которые заложены внутри. В процессе дебага я нашел какие xpath он формирует:

ancestor::form//input[@type = ‘radio’][$SELECTOR][(@id = ancestor::form//label[contains(normalize-space(string(.)), $OPTION)]/@for) or @placeholder = $OPTION]

ancestor::form//label[contains(normalize-space(string(.)), $OPTION))]//input[@type = ‘radio’][$SELECTOR]

ancestor::form//input[@type = ‘radio’][$SELECTOR][@value = $OPTION)]

где $SELECTOR и $OPTION это то что ты передаешь в selectOption.

Т.е. если хочется юзать selectOption либо разметку переделать либо уже другое решение как у тебя.