Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Решено] Как отметить чексбокс из группы чекбоксов?


(ezoterik) #1

Пробую в функциональных тестах (yii2) в таком коде html:

<div id="bmessage-topicslinks">
<div class="checkbox"><label><input type="checkbox" name="BMessage[topicsLinks][]" value="1"> Предложения</label></div>
<div class="checkbox"><label><input type="checkbox" name="BMessage[topicsLinks][]" value="2"> Спрос</label></div>
<div class="checkbox"><label><input type="checkbox" name="BMessage[topicsLinks][]" value="3"> Совместная деятельность</label></div>
<div class="checkbox"><label><input type="checkbox" name="BMessage[topicsLinks][]" value="4"> Сайты</label></div>
</div>

Отметить один из пунктов:

$I->checkOption('#bmessage-topicslinks input[value="4"]');

В ответ, при выполнении теста получаю:

Couldn't check option "#bmessage-topicslinks input[value="4"]":
InvalidArgumentException: Malformed field path "BMessage[topicsLinks"

Подскажите, пожалуйста, что я делаю не так.


(Volodymyr) #2

$I->checkOption("//input[@value=4]");


(ezoterik) #3

К сожалению, аналогичный результат:

Couldn't check option "//input[@value=4]":
InvalidArgumentException: Malformed field path "BMessage[topicsLinks"

(ezoterik) #4

Судя по всему, проблема в классе /codeception/src/Codeception/Lib/InnerBrowser.php, в функции checkOption (в uncheckOption
по идее та же проблема). Если эту строку:

$name = rtrim($name, '[]');

Заменить на:

$name = str_replace('[]', '', $name);

То все начинает прекрасно работать. С rtrim, мне кажется, получается не тот эффект который нужен, так как символы [] в строке “BMessage[topicsLinks][]” удаляются не корректно. В итоге имя поля получается таким “BMessage[topicsLinks”. С str_replace же удаляется исключительно последовательность [], не трогая лишние квадратные скобки.

Возможно кто-то сможет мне помочь чтобы создать issues в гите, а то с английским у меня проблемы (точно не смогу весь этот топик перевести корректно) :frowning:


(Michael Bodnarchuk) #5

Вы можете написать свой метод checkOption внутри класса FunctionalHelper, там вы можете применить свой фикс и подменить стандартный метод на свой.

Впринципе да, похоже на баг. Буду очень благодарен, если вы опишите эту проблему на английском с описанием предложенного фикса на гитхабе https://github.com/Codeception/Codeception/issues
Тогда будет намного больший шанс, что я про неё не забуду и починю в следующем релизе.


(ezoterik) #6

Большое спасибо! Локально проблему удалось решить через FunctionalHelper.
Issue создал https://github.com/Codeception/Codeception/issues/1535


(Michael Bodnarchuk) #7

Добавил фикс в 2.0.8. Собираюсь сегодня-завтра его зарелизить


(ezoterik) #8

Спасибо большое. Единственное, что, я так понял, в функции uncheckOption будет точно такая же проблема, (конкретно я эту функцию не использую еще, поэтому нужно будет проверить еще). Но уже имя пример как сделать тест правильно (на примере вашего фикса), я могу позже попробовать сделать pull request для правки этой функции


(Michael Bodnarchuk) #9

окей! всегда рад пул реквестам