如何正确评估从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.15
: 3.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?