Nightwatch:等待没有通过/失败结果的元素
Posted
技术标签:
【中文标题】Nightwatch:等待没有通过/失败结果的元素【英文标题】:Nightwatch: wait for element without pass/fail result 【发布时间】:2017-02-05 04:55:52 【问题描述】:相关问题:
wait for element present without error Nightwatchjs: how to check if element exists without creating an error/failure/exception Selenium WebDriver : Wait for complex page with javascript(JS) to load每当我加载网页时,我都需要等待 ajax 调用完成。我目前这样做:
browser.waitForElementNotPresent(
"cssSelector_For_html_afterAJAXComplete",
10000 //timeout
);
这为我的测试添加了一个额外的断言,并且人为地使报告的测试计数超出了必要的范围。
有什么想法吗?
【问题讨论】:
事实证明,使用nightwatch-cucumber 为我提供了必要的包装,使夜间测试报告更合适。我建议您使用这个库进行测试。 【参考方案1】:好的,我一起破解了一些东西。我基本上是使用 browser.execute(function, params, callback)
将 javascript 发送到 selenium 中的控制台@
function waitForElement_NoPassFail(selector, timeout)
browser.execute(function(selector, timeout, done)
let intervalId;
var p1 = new Promise(function(resolve, reject)
intervalId = setInterval(function()
let itemArray = document.querySelectorAll(selector);
if(itemArray.length == 1)
clearInterval(intervalId);
resolve(true); //element found
else if(itemArray.length>1)
reject(false); //too many elements found, because of ambiguous selector
, 100);
);
var p2 = new Promise(function(resolve, reject)
setTimeout(reject,timeout, false); //timeout reached
);
return Promise.race([p1, p2]).then(function(result)
done(result);
);
,
[selector, timeout],
function(result)
if(!result)
throw "Element: " + selector + " wasn't found after " + timout + " ms.";
else
console.log("Element found within timeout limits.") //doesn't trigger assert=ok
);
;
waitForElement_NoPassFail(
"cssSelector_that_Is_Valid_after_AjaxIsComplete",
10000 //timeout
);
这可以通过多种方式进行扩展,例如支持 xPath。您可以在等待时使用 nightwatch 全局变量来检查元素的频率。如果您需要帮助,请写评论。
【讨论】:
以上是关于Nightwatch:等待没有通过/失败结果的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 nightwatch.js 或 javascript 列出具有共同属性值的相同元素?
如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素