Node.js:为什么我的预期值没有在"try-catch"子句的"catch"块中返回?



我有一个node.js项目,该项目测试网站的功能。它使用webdriver.io v4和摩卡/柴。

我已经创建了一个功能,该函数检查是否存在一个元素,该元素是否存在1分钟的超时。如果元素存在,则应返回true。如果没有,它应该返回false

我使用相同的功能来测试页面上是否不存在元素。在这种情况下,我希望该功能返回false。但是,该功能没有返回false,而是会引发超时错误,并且既没有返回truefalse。这很奇怪,因为我在我的try-catch子句的捕获块中加入了return false语句。

在此项目中,当功能失败时,我将收到诸如expected false to equal trueexpected 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。如果页面上不存在该元素,则会抛出超时错误,但均未返回truefalse

如果您仍然存在未返回的价值问题,请尝试以下方法。我不确定catch为什么无法返回,但是您可以尝试以下操作:

checkElementExists: {
    value: function (element) {
        let val = false;
        try {
            element.waitForExist();
            if (element.isExisting()) {
                val = true;
            } 
        } catch (ex) {
            console.log(ex);
        }
        return val;
    }
}