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

Codeception: работа с checkbox элементами

codeception
Теги: #<Tag:0x00007fedb90dfaf8>

#1

А может кто подсказать, почему при использовании

$I -> seeCheckboxIsChecked('#n_opt1');

для кода вида

<h3>Option 1:<input name="n_opt1" class="c_opt1" type="checkbox" checked></h3>

Я получаю ошибку вида

There was 1 failure:

---------
1) Failed to  *** checkbox1_is_selected *** in WelcomeCept (tests/acceptance/WelcomeCept.php)

 Step  I see checkbox is checked "#n_opt1"
 Fail  Element located either by name, CSS or XPath element with 'checkbox' was not found.

Scenario Steps:

 4. $I->seeCheckboxIsChecked("#n_opt1")
 3. $I->seeResponseCodeIs("200")
 2. $I->amOnPage("/test.html")
 1. $I->amOnUrl("http://52.37.xxx.xxx/")

При этом если я использую

$I->seeCheckboxIsChecked(".с_opt1")

то все работает нормально

$ codecept -V
Codeception version 2.1.8

(Konstantin) #2

напиши так
$I->seeCheckboxIsChecked(’//input[@name=“n_opt1”]’);


#3

Так не работает

Expected selector, but <delimiter "/" at 0> found.

А вот так проходит нормально

$I->seeCheckboxIsChecked('body input[name="n_opt1"]');

или просто

$I->seeCheckboxIsChecked('input[name="n_opt1"]');

P.S.
хотелось бы понять, почему не работает обращение по имени. В офф доке есть пример вида

$I->seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms


(Ugin Berets) #4

А почему не
$I -> seeCheckboxIsChecked(‘n_opt1’); ?

По-моему # - значит что ты ищешь по id.


#5

Да, действительно, но просто

$I -> seeCheckboxIsChecked('n_opt1');

не работает тоже. Так что нужно использовать

$I -> seeCheckboxIsChecked('input[id="id_123"]');
$I -> seeCheckboxIsChecked('input[class="c_opt1"]');
$I -> seeCheckboxIsChecked('input[name="n_opt1"]');

P.S.
как мне подсказал знакомый js developer, для id и class есть соотв shortcut .class и #id, а для name такого уже нет.

На SO нашел такое упоминание

Common PhpBrowser drawbacks:

You can click only on links with valid urls or form submit buttons
You can’t fill fields that are not inside a form
You can’t work with JavaScript interactions: modal windows, datepickers, etc.,

тема от 2014 года, эти ограничения все еще актуальные? И где вообще можно прочитать про ограничения? Здесь http://codeception.com/docs/modules/PhpBrowser вообще ни слова


(Roma Marinsky) #6

$locator - это только для id. так как у тебя name атрибут есть лучше юзай By.name("n_opt1") - так быстрее ищется. Ну или же на крайняк уже цсс: [name=n_opt1] или input[name=n_opt1]
ну или чтоб ваще коротенько с цсс то = input.c_opt1


#7

лучше юзай By.name(“n_opt1”) - так быстрее ищется

просто By.name(“n_opt1”) не работает

$I -> seeCheckboxIsChecked('By.name("n_opt1")');

Или я что то упускаю?

P.S.
я правильно понимаю, что если у меня на форме есть checkbox у которого есть onclick=“js_func()”. И в этом js_func() я меняю dom (а точнее включаю/выключаю disabled для поля), то для проверки такой страницы мне нужно использовать webdriver и через selenium/phantomjs проверять такую страницу?


(Konstantin) #8

в кодцепшене так работать не будет, надо писать чтото в стиле
$this->getModule('WebDriver')->webDriver->findElements(WebDriverBy::name($field));

используй
$I -> seeCheckboxIsChecked('input[name="n_opt1"]');


#9

Да, на этом варианте и остановился в итоге.