Пользовательский метод ожидания NodeJS Selenium-webdriver не возвращает желаемый результат - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь написать набор автоматических тестов в Mocha для тестирования веб-приложения узла.

Я создал собственный метод ожидания, чтобы веб-драйвер ожидал, пока поле ввода или текстовая область не содержат отправленный текст из метода sendKeys (), прежде чем перейти к проверке.

IУ меня проблемы с получением пользовательского метода ожидания, который на самом деле возвращает желаемое значение.

    function waitForAttributeValue(element, attribute, value)
    {
       return element.getAttribute(attribute).then(result => 
       {
          if(result === value)
             return result;
          else
             return false;
       });
    }

А потом я помещаю в ожидание вот так:

let result = this.driver.wait(waitForAttributeValue(element, 'value', 'hello'), 4000);

Результат иногда возвращает значениеЯ ожидаю (в данном случае «привет»), и иногда он возвращает false, что приводит к сбою моего теста.

На основе документации

Чтобы определить пользовательское условие, просто вызовите WebDriver.wait с функцией, которая в конечном итоге вернет истинное значение (ни null, undefined, false, 0, ни пустую строку)

Есть ли что-то, что яотсутствует или я неправильно истолковал документацию?

Дополнительно я использую: Node v.8.11.3 и пакет узла Selenium v.4.0.0-alpha.1

Спасибо за любыепредложения заранее.

1 Ответ

0 голосов
/ 28 сентября 2018

driver.wait() ожидаем функцию в качестве аргумента, но вы передали обещание.

Вы должны изменить функцию waitForAttributeValue, чтобы она возвращала функцию следующим образом:

function waitForAttributeValue(element, attribute, value) {
    return function () {
        return element.getAttribute(attribute).then(result => {
            if (result === value)
                // return result; recommend to return true as here
                // because empty string will be treated as False
                return true;
            else
                return false;

            // or you cam simply return result === value to avoid
            // using  if/else.
            return result === value;

        });
    };
}
...