如何在量角器中杀死(停止/清除)browser.driver.wait()?

时间:2016-03-18 02:11:46

标签: selenium-webdriver protractor

在量角器中使用wait()时遇到问题 这是我的代码:

var timeOut = function(callback) {
        browser.driver.wait(function() {
            callback();
        }, 5000);

    };

this.Then(/^input userName "([^"]*)", password "([^"]*)" and click login$/, function (userName, password, next) {
        login();

        function login() {
            var userNameElm = by.css('[id="userName"]');

            browser.driver.isElementPresent(userNameElm).then(function(exist) {
                if (exist) {
                    browser.driver.findElement(userNameElm).sendKeys("oh my gold!");
                    browser.driver.findElement(by.css('[id="pass"]')).sendKeys("pass test");
                    browser.driver.findElement(by.id('login')).click().then(function(){
                       return next();
                    });
                } else {
                    timeOut(login);
                }

            });
        }
    });

我收到了错误Message: Failed: Wait timed out after。出现问题是因为它将永远调用timeOut(login); 我该如何杀死wait()函数。谢谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您应该只使用setTimeout,而不是使用browser.driver.waitbrowser.driver.sleep

login();

function login() {
    var userNameElm = by.css('[id="userName"]');

    return browser.driver.isElementPresent(userNameElm).then(function(exist) {
        if (exist) {
            browser.driver.findElement(userNameElm).sendKeys("oh my gold!");
            browser.driver.findElement(by.css('[id="pass"]')).sendKeys("pass test");
            return browser.driver.findElement(by.id('login')).click();
        } else {
            return browser.driver.sleep(5000).then(function() {
                return login();
            });
        }
    });
}

答案 1 :(得分:0)

你应该看一下protractors异步性(这是一个有效的单词吗?)和结果的promise链来反映类似于同步的行为,因此可以控制你的步骤顺序和有效的结果。

建议:

this.Then(/^input userName "([^"]*)", password "([^"]*)" and click login$/, function (userName, password) {
        return browser.driver.isElementPresent(by.css('[id="userName"]'))
           .then(function(element) {
                if (element != null) {
                    return browser.driver.findElement(userNameElm)
                       .sendKeys("oh my gold!");
                } else {
                    //fail- element not found
                    return false; 
                }

           })
           .then(function(){
               return browser.driver.findElement(by.css('[id="pass"]'))
                   .sendKeys("pass test");
           })
           .then(function(){
               return browser.driver.findElement(by.id('login'))
                   .click(); 
           })
        });
    }
});

如果你没有将它放到promise链的末尾,整个块将超时,由量角器配置中的allScriptsTimeout给出。