2017-07-17 10 views
0

私は私のカスタムステップ定義で(thisに基づいて)のコードを次ていますBehatからSeleniumへのjavascriptコードを正しく評価する方法は?

$js = <<<JS 

    function checkVisibility(elm, evalType) { 
     evalType = evalType || "visible"; 

     var vpH = jQuery(window).height(), // Viewport Height 
      st = jQuery(window).scrollTop(), // Scroll Top 
      y = jQuery(elm).offset().top, 
      elementHeight = jQuery(elm).height(); 

     if (evalType === "visible") return ((y < (vpH + st)) && (y > (st - elementHeight))); 
     if (evalType === "above") return ((y < (vpH + st))); 
    } 

    var el = document.querySelector("$locator"); 
    return checkVisibility(el, "visible"); 
JS; 


    $result = $this->getSession()->evaluateScript($js); 

同様のコードでは、クロムコンソールでうまく機能しているが、Behat文脈で$resultは常にnullです。

私はBehat:3.0.15とSelenium 3.4とPhantomJSをブラウザとして使用しています。

一般に、私は1行のコードを渡すとうまくいきます。どんなにもヌルとなるコードの下ので、私の関数内でどのような、私は、常にnullました:

$js = <<<JS 

    function checkVisibility() { 
     return true; 
    } 

    // var el = document.querySelector("$locator"); 
    return checkVisibility(); 
JS; 
+0

理由だけではなく、使用しないで 'isVisible'方法:

また、あなたのようなものを持っている必要があります応答を取得するには?試しても働いていないのですか? – lauda

答えて

1

私が働く怒鳴るようなものがあります。

$js = <<<JS 

    (function myFunction() { 
     //function content 
    })() 
JS; 

をあなたは要素を待つ必要があります要素が表示されていることを確認してください。

$result = $this->getSession()->evaluateScript("return $js"); 
+0

そして、 'return true 'を' myFunction() 'に置くと、PHPでも' true'を取得できますか? – drupality

+0

はい、PHPでも 'true'を取得します。私はページオブジェクトを使用していますが、私は '$ this-> getDriver() - > evaluateScript(" return $ function ");をページオブジェクト内に持っています。 – lauda

+0

私の環境には何か問題があります。私の場合、 '$ result'は常に' null'です:/あなたはブラウザとしてファントムを使っていますか? – drupality

関連する問題