如何正确评估从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);

类似的代码在Chrome控制台中运行良好,但在Behat上下文中$result始终为空。

我正在使用3.0.153.0.15和Selenium 3.4以及PhantomJS作为浏览器。

一般来说,如果我传递单行代码,它似乎工作正常。 不管我的函数里面是什么,我一直都是null,所以下面的代码也会导致null:

    $js = <<<JS

    function checkVisibility() {
      return true;
    }  

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

我有像波纹管那样的东西:

    $js = <<<JS

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

您应该等待之前的元素,以确保元素可见。

同样为了得到回应,你应该有这样的东西:

$result = $this->getSession()->evaluateScript("return $js");
链接地址: http://www.djcxy.com/p/83609.html

上一篇: How to evaluate javascript code from Behat to Selenium properly?

下一篇: jQuery queues fadeIn() on scroll