Mink:等待页面加载@BeforeStep

时间:2012-08-23 08:43:52

标签: selenium selenium-webdriver behat mink

我想在依赖于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的正确位置是什么?

2 个答案:

答案 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")');
}