在测试期间,我需要做以下事情:
我的代码:
$this->byId('reg_email')->value('test@example.com');
$this->byId('reg_password')->value('seecret');
// No form here, so i can't just call submit()
// This click invokes ajax request
$this->byId('reg_submit')->click();
// Check page content (this page should appear after redirect)
$msg = $this->byCssSelector('h1')->text();
$this->assertEquals('Welcome!', $msg);
问题
解决方案,我不喜欢:
sleep(3);
。我不喜欢它,因为:
我想知道,有没有办法跟踪ajax请求+刷新并及时检查内容?
我的设置:
答案 0 :(得分:10)
好的,有一种解决方案,我不是很喜欢它,但它不是什么都没有。
我们的想法是使用更智能的“睡眠”,有一种方法waitUntil()
,它以毫秒为单位anonymous function
和timeout
。做什么 - 在循环中运行此传递的函数,直到超时命中或函数返回True
。所以你可以运行一些东西并等到上下文发生变化:
$this->waitUntil(function () {
if ($this->byCssSelector('h1')) {
return true;
}
return null;
}, 5000);
如果有人提供更好的解决方案,我仍然会很高兴。
答案 1 :(得分:0)
嗯,我不确定它对你有用,但你可以尝试使用它:
$this->timeouts()->implicitWait(20000);