NodeJS Selenium-webdriver自定义等待方法未返回期望的结果

时间:2018-09-28 00:21:09

标签: node.js selenium selenium-webdriver automated-tests mocha

我正在尝试在Mocha中编写一组自动化测试来测试节点Web应用程序。

我制作了一个自定义的wait方法,以使webdriver等待输入框或文本区域包含sendKeys()方法发送的文本,然后再进行检查。

我在获取自定义的wait方法以实际返回我想要的值时遇到麻烦。

    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);

结果有时会返回我期望的值(在这种情况下为“ hello”),有时会返回false,这会导致我的测试失败。

基于documentation

  

要定义自定义条件,只需使用以下命令调用WebDriver.wait   最终将返回真实值的函数(既不为null,   undefined,false,0或空字符串)

是否缺少某些内容,或者我误解了文档?

此外,我正在使用: 节点v.8.11.3和Selenium节点软件包v.4.0.0-alpha.1

非常感谢您提出任何建议。

1 个答案:

答案 0 :(得分:0)

driver.wait()期望函数作为参数,但是您传入了Promise。

您应该更改函数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;

        });
    };
}