我想在依赖于jQuery的@BeforeStep钩子上执行页面上的一些javascript。但是当时没有定义jQuery,实际上页面是空白的。
这是我想要实现的目标:
/**
* @BeforeStep @javascript
*/
public function registerAjaxEventHandlers()
{
$javascript = <<<JS
window.jQuery(document).ready(function () {
if (window.__ajaxStatus !== undefined) {
return;
}
window.__ajaxStatus = 'none';
$('body').ajaxStop(function() {
window.__ajaxStatus = 'idle';
});
$('body').ajaxStart(function() {
window.__ajaxStatus = 'in-flight';
});
});
JS;
//$this->getSession()->wait(5000, 'window.jQuery !== undefined');
$this->getSession()->executeScript($javascript);
}
我想也许我可以等待页面首先加载jQuery(注释行),但事实并非如此。似乎执行暂停,直到处理该钩子。
behat / mink生态系统在页面上执行javascript的正确位置是什么?
答案 0 :(得分:5)
这个怎么样?
$this->getSession()->wait(5000, 'typeof window.jQuery == "function"');
答案 1 :(得分:0)
您的javascript在步骤之前执行,即在加载页面之前执行。但是如果你加载一个页面,那么各种ondomload / pageload JavaScript也会被解雇。
如果您乐意在初始页面之后运行它,可以像这样使用@AfterStep:
/**
* @AfterStep
*/
public function set_selenium_css_selector (Behat\Behat\Event\StepEvent $event) {
$this->getSession()->wait(10, 'jQuery ("body").addClass ("selenium")');
}