codeception 看不到字段,但浏览器可以看到(Chrome 驱动程序)

codeception do not see field but the browser does (Chrome Driver)

我对 angular 5 应用程序进行了解码测试。 HTML5 漂亮 url.
我正在测试 2 个步骤的表格。

url: /register/ fields: first_name,email,password  
when success redirect to:  
url: /personal-details/ fields: date_of_birth 

第一步非常顺利。我测试了所有场景。当第一步结束时,浏览器按预期重定向 HTML5 重定向到 /personal-details/
问题是 codeception 看不到 #date_of_birth,即使它存在。
为了验证这一点,我暂停了执行并在控制台中 运行

  document.getElementById('date_of_birth') 

并且找到了该字段。它在页面上。

我觉得跟重定向有关,所以我加了一个特殊的重定向,让第一个表单也有同样的问题,而且运行正常。

这是错误:

测试字段第二步

 Test  tests\acceptance\FirstCest.php:testFieldsSecondStep
 Step  See element "#date_of_birth"
 Fail  Failed asserting that an array is not empty.

场景步骤:

可能会出什么问题?
谢谢

也许 Codeception 在页面完全加载之前检查元素是否存在。
尝试使用 waitForElement 而不是 seeElement

$I->waitForElement('#date_of_birth', 10);

我遇到了这个 post 类似的问题。因为(在我看来)没有正当理由我收到了消息

"断言数组不为空失败。"

当使用 $I->canSeeElement()$I->canSeeElementInDom() 时。就我而言,我没有处理异步加载的元素,这些元素存在。

我的代码是这样的:

$I->canSeeElementInDOM('//*[@id="MyId"]//input[@name="myCheckbox"][not(@checked)]');

使用以下语法解决了问题:

$I->canSeeElementInDOM('//*[@id="MyId"]//input[@name="myCheckbox" and not(@checked)]');

希望这对某人也有帮助。