Node.js: Почему мое ожидаемое значение не возвращается в блоке 'catch' предложения 'try-catch'? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть проект Node.js, который проверяет функциональность веб-сайта.Он использует Webdriver.io v4 и Mocha / Chai.

Я создал функцию, которая проверяет, существует ли элемент на странице с таймаутом в 1 минуту.Если элемент существует, он должен вернуть true.Если это не так, он должен вернуть false.

. Я использую ту же функцию, чтобы проверить, не присутствует ли элемент на странице.В этом случае я ожидаю, что функция вернет false.Однако вместо возврата false функция выдает ошибку Timeout и не возвращает ни true, ни false.Это странно, потому что я включил оператор return false в блок catch моего предложения try-catch.

В этом проекте при сбое функции я получу сообщение, такое как 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.

Actual: Если элемент существует на странице, функция возвращает true.Если элемент не существует на странице, выдается ошибка тайм-аута, но не возвращается ни true, ни false.

1 Ответ

1 голос
/ 28 июня 2019

Если проблема все еще не возвращена, попробуйте следующий подход. Я не уверен, почему catch не возвращается, но не могли бы вы попробовать следующее:

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