5

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 をロードするのを待つことができるのではないかと考えました (コメント行) が、そうではありません。そのフックが処理されるまで実行が停止しているようです。

ページでjavascriptを実行するためのbehat/minkエコシステムの適切な場所はどこですか?

4

2 に答える 2

5

これはどう?

$this->getSession()->wait(5000, 'typeof window.jQuery == "function"');
于 2012-08-24T07:41:07.237 に答える
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")');
}
于 2013-08-31T02:12:35.660 に答える