Selenium webdriver 如何在量角器中终止(停止/清除)browser.driver.wait()?

Selenium webdriver 如何在量角器中终止(停止/清除)browser.driver.wait()?,selenium-webdriver,protractor,Selenium Webdriver,Protractor,在量角器中使用wait()时出现问题。 这是我的代码: var timeOut = function(callback) { browser.driver.wait(function() { callback(); }, 5000); }; this.Then(/^input userName "([^"]*)", password "([^"]*)" and click login$/, function (userName,

在量角器中使用
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);
                }

            });
        }
    });
我收到一条错误消息:失败:等待在之后超时。出现此问题是因为它将调用
timeOut(登录)永远。

如何终止wait()函数。谢谢。

在这种情况下,您只需使用
浏览器.driver.sleep
,而不必使用
设置超时
浏览器.driver.wait

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

您应该了解量角器异步性(这是一个有效的词吗?)以及由此产生的承诺链,以反映类似同步的行为,因此假设您可以控制步骤顺序和有效结果

建议:

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(); 
           })
        });
    }
});
如果您没有到达量角器配置中allScriptsTimeout给出的承诺链的末尾,整个块将超时。

请参阅了解超时:)谢谢:),我将了解