Selenium 貂皮:等待页面加载到@BeforeStep
我想在@beforstep钩子中的页面上执行一些javascript,该钩子依赖于jQuery。但当时并没有定义jQuery,事实上页面是空白的 以下是我试图实现的目标:Selenium 貂皮:等待页面加载到@BeforeStep,selenium,selenium-webdriver,behat,mink,Selenium,Selenium Webdriver,Behat,Mink,我想在@beforstep钩子中的页面上执行一些javascript,该钩子依赖于jQuery。但当时并没有定义jQuery,事实上页面是空白的 以下是我试图实现的目标: /** * @BeforeStep @javascript */ public function registerAjaxEventHandlers() { $javascript = <<<JS window.jQuery(document).ready(function ()
/**
* @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);
}
/**
*@BeforeStep@javascript
*/
公共函数注册表rajaxEventHandlers()
{
$javascript=getSession()->executeScript($javascript);
}
我想也许我可以先等页面加载jQuery(注释行),但事实并非如此。在处理该钩子之前,执行似乎会停止
在behat/mink生态系统中,在页面上执行javascript的正确位置是什么
$this->getSession()->wait(5000, 'typeof window.jQuery == "function"');
您的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")');
}
这也没用。当屏幕为白色并继续时,等待5秒。我做了类似的操作,但这会导致在步骤与浏览器不交互时(如加载先决条件数据时)场景运行更长时间。执行类似于
$this->getSession->getCurrentUrl()==“about:blank”
的检查会有所帮助,但也许有一种更优雅的方法。我最终将上述JS脚本添加到源代码中。