我正在使用Mink
和 Zombie Driver 来编写接受测试。现在我正在尝试进行 ajax调用,所以我使用wait($timeout)
方法等待响应,但它不起作用。我正在调用等待$this->session->wait(20000)
,但是当我使用php函数time()
计时时,显然这几乎没有时间完成,所以我认为这是一个非阻塞调用,如果我试图访问$this->session->getPage()
中的内容,它会阻止,但这也不是真的。我最初有一个($.active === 0)
条件作为wait()
的第二个参数,但是没有用,所以我删除了第二个参数以隔离问题。
是否有必要使用behat's docs中的spin()
函数,或wait()
函数是否足够。如果需要spin()
那么wait()
是什么?
安装了phantomjs driver for mink并看到它有效后,我必须得出结论问题与僵尸驱动程序相关。
答案 0 :(得分:0)
您可以将wait()用于JS条件,例如:
wait(30000, "document.readyState === 'complete'")
使用spin进行自定义等待,其功能如文档中所述。
的其他一些示例答案 1 :(得分:0)
我发现了同样的问题并在互联网上找到了这个功能,它运行正常。 Reference
/**
* Wait
*
* @param integer $time * @param string $condition
*
* @throws BehaviorException If timeout is reached
*/
public function wait($time = 10000, $condition = null){
if (!$this->getSession()->getDriver() instanceof Selenium2Driver) {
return;
}
$start = microtime(true);
$end = $start + $time / 1000.0;
if ($condition === null) {
$defaultCondition = true;
$conditions = [
"document.readyState == 'complete'", // Page is ready
"typeof $ != 'undefined'", // jQuery is loaded
"!$.active", // No ajax request is active
"$('#page').css('display') == 'block'", // Page is displayed (no progress bar)
"$('.loading-mask').css('display') == 'none'", // Page is not loading (no black mask loading page)
"$('.jstree-loading').length == 0", // Jstree has finished loading
];
$condition = implode(' && ', $conditions);
} else {
$defaultCondition = false;
}
// Make sure the AJAX calls are fired up before checking the condition
$this->getSession()->wait(100, false);
$this->getSession()->wait($time, $condition);
// Check if we reached the timeout unless the condition is false to explicitly wait the specified time
if ($condition !== false && microtime(true) > $end) {
if ($defaultCondition) {
foreach ($conditions as $condition) {
$result = $this->getSession()->evaluateScript($condition);
if (!$result) {
throw new BehaviorException(
sprintf(
'Timeout of %d reached when checking on "%s"',
$time,
$condition
)
);
}
}
} else {
throw new BehaviorException(sprintf('Timeout of %d reached when checking on %s', $time, $condition));
}
}