我已經按照我的自定義步驟定義代碼(基於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);
類似的代碼在Chrome控制檯運作良好,但在貝哈特方面$result
總是空。
我使用Behat:3.0.15
與Selenium 3.4
和PhantomJS作爲瀏覽器。
一般來說,如果我傳遞一行代碼,它似乎工作正常。不管是什麼我的函數裏,我一直爲空,所以下面的代碼也與空的結果:
$js = <<<JS
function checkVisibility() {
return true;
}
// var el = document.querySelector("$locator");
return checkVisibility();
JS;
爲什麼只是沒有使用'isVisible'方法?你有沒有嘗試過,不工作? – lauda