Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 貂皮:等待页面加载到@BeforeStep_Selenium_Selenium Webdriver_Behat_Mink - Fatal编程技术网

Selenium 貂皮:等待页面加载到@BeforeStep

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 ()

我想在@beforstep钩子中的页面上执行一些javascript,该钩子依赖于jQuery。但当时并没有定义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);
    }
/**
*@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脚本添加到源代码中。