我有一个node.js项目,该项目测试网站的功能。它使用webdriver.io v4和摩卡/柴。
我已经创建了一个功能,该函数检查是否存在一个元素,该元素是否存在1分钟的超时。如果元素存在,则应返回true
。如果没有,它应该返回false
。
我使用相同的功能来测试页面上是否不存在元素。在这种情况下,我希望该功能返回false
。但是,该功能没有返回false,而是会引发超时错误,并且既没有返回true
或false
。这很奇怪,因为我在我的try-catch子句的捕获块中加入了return false
语句。
在此项目中,当功能失败时,我将收到诸如expected false to equal true
或expected undefined to equal true
之类的消息。在这种情况下,我会收到消息Timeout of 60000ms exceeded. Try to reduce the run time or increase your timeout for test specs (http://webdriver.io/guide/testrunner/timeouts.html); if returning a Promise, ensure it resolves.
是的,我希望element.waitForExist()
会丢弃超时错误,但是应通过返回false
在捕获块中处理此错误。该程序的确显示了console.log(ex)
行预期的错误日志,但不返回false
。
为什么在这种情况下,我的功能不返回false
?返回正确值的最佳/最简单方法是什么?谢谢!
这是我的功能:
checkElementExists: {
value: function (element) {
try {
element.waitForExist();
if (element.isExisting()) {
return true;
} else {
return false;
}
} catch (ex) {
console.log(ex);
return false;
}
}
}
预期:如果在页面上存在元素,则该函数返回true
。如果页面上不存在该元素,则该函数返回false
。
实际:如果在页面上存在元素,则该函数返回true
。如果页面上不存在该元素,则会抛出超时错误,但均未返回true
或false
。
如果您仍然存在未返回的价值问题,请尝试以下方法。我不确定catch
为什么无法返回,但是您可以尝试以下操作:
checkElementExists: {
value: function (element) {
let val = false;
try {
element.waitForExist();
if (element.isExisting()) {
val = true;
}
} catch (ex) {
console.log(ex);
}
return val;
}
}