Выбор варианта с динамическим идентификатором и именем

#php #codeception

#php #codeception

Вопрос:

Я использую Codeception для тестирования расширенного пользовательского поля в приложении WordPress.

У меня возникли проблемы с поиском окна выбора html. Это потому, что у него никогда не бывает статического имени или идентификатора, например id="acf-field-field_58079c4650b04_type" name="fields[field_58079c4650b04] . Цифры меняются каждый раз, что и ожидалось.

Использование codeceptions

 $I->selectOption("contains(@id, '_type')]", 'number');
  

Я не смог заставить его найти его, и он выдает эту ошибку.

  1) CreateNewFieldCest: Create a new advanced custom field
 Test  tests/acceptance/CreateNewFieldCest.php:CreateNewField
 Step  Select option "//input[@type='select' and contains(@id, '_type')]","number"
 Fail  Field by name, label, CSS or XPath element with '//input[@type='select' and contains(@id, '_type')]' was not found.

Scenario Steps:

 6. $I->selectOption("//input[@type='select' and contains(@id, '...","number")
 5. $I->wait(2)
 4. $I->fillField("//input[@type='text' and @class='label' a...","test field")
 3. $I->click("  Add Field")
 2. $I->fillField("#title","test field")
 1. $I->amOnPage("/wp/wp-admin/post-new.php?post_type=acf")


FAILURES!
Tests: 1, Assertions: 0, Failures: 1.
Script codecept handling the __exec_command event returned with error code 1
  

Может ли кто-нибудь порекомендовать подход, позволяющий использовать selectOption для поиска поля выбора с динамическим идентификатором и именем.

Ответ №1:

Xpath кажется правильным, он должен быть в состоянии найти его, если он содержится в dom и виден.

Заполняется ли он из запроса ajax?

Тогда, вероятно, выбор еще не отрисован или не заполнен.

Вы можете использовать что-то вроде этого, чтобы дождаться завершения запросов ajax

   $I->waitForJs('return jQuery.active == 0', 10);
  

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

1. Он запускается при нажатии кнопки, но я вижу, что он отображается, поскольку codeception генерирует скриншот при неудачных тестах, и это видно :/