Selenium webdriver 量角器中的显式等待不起作用

Selenium webdriver 量角器中的显式等待不起作用,selenium-webdriver,gulp,protractor,gulp-protractor,Selenium Webdriver,Gulp,Protractor,Gulp Protractor,我正在使用browser.wait处理登录页面上的微调器,但它实际上在等待我作为第三个参数传递的整个时间 当主页在15分钟后出现时,它应该转到下一个测试用例,因为我已经提供了20分钟的等待时间。谁能帮我一下吗 it('test case', function () { loginPage.login(browser.params.Login.username, browser.params.Login.password); browser.wait(function(

我正在使用browser.wait处理登录页面上的微调器,但它实际上在等待我作为第三个参数传递的整个时间

当主页在15分钟后出现时,它应该转到下一个测试用例,因为我已经提供了20分钟的等待时间。谁能帮我一下吗

  it('test case', function () {
      loginPage.login(browser.params.Login.username, browser.params.Login.password);
      browser.wait(function() {
        loginPage.Spinner().then(function(presenceOfElement) {
            logger.info('App is waiting for spinner to complete'+ presenceOfElement);
            return !presenceOfElement
        }, 20*60*1000);
      });
    });

我建议重写页面对象和测试,以便更清楚地了解测试中发生了什么。试试这个:

// loginPage page object
this.getSpinner = function () {
    return element(by.tagName('a'));
};

// test
browser.wait(function () {
    return loginPage.getSpinner().isPresent().then(function (isSpinnerPresent) {
        return !isSpinnerPresent;
    )};
}, 20*60*1000);

我建议重写页面对象和测试,以便更清楚地了解测试中发生了什么。试试这个:

// loginPage page object
this.getSpinner = function () {
    return element(by.tagName('a'));
};

// test
browser.wait(function () {
    return loginPage.getSpinner().isPresent().then(function (isSpinnerPresent) {
        return !isSpinnerPresent;
    )};
}, 20*60*1000);


假设您正在等待微调器消失——您是否尝试过预期条件的不可见性。你能发布你的
Spinner()
函数吗?它似乎没有解决承诺-即,我在这里阅读@bob.mazzo这里是我的页面对象函数。this.Spinner=元素(按.tagName('a'));this.Spinner=函数(){return browser.isElementPresent(this.Spinner);};也许我遗漏了一些东西,但我被双重引用this.Spinner所抛弃。可能类似于:var elem=element(按.tagName('a'));this.Spinner=function(){return browser.isElementPresent(elem);};`还有,您希望出现多少
元素?只有一个?@bob.mazzo Ohh很抱歉输入错误,this.loginSpinner=element(by.tagName('a'));this.Spinner=function(){return browser.isElementPresent(this.loginSpinner);};&是的,我们在登录时只有一个标记。假设您正在等待微调器消失——您是否尝试过预期条件的不可见性。你能发布你的
Spinner()
函数吗?它似乎没有解决承诺-即,我在这里阅读@bob.mazzo这里是我的页面对象函数。this.Spinner=元素(按.tagName('a'));this.Spinner=函数(){return browser.isElementPresent(this.Spinner);};也许我遗漏了一些东西,但我被双重引用this.Spinner所抛弃。可能类似于:var elem=element(按.tagName('a'));this.Spinner=function(){return browser.isElementPresent(elem);};`还有,您希望出现多少
元素?只有一个?@bob.mazzo Ohh很抱歉输入错误,this.loginSpinner=element(by.tagName('a'));this.Spinner=function(){return browser.isElementPresent(this.loginSpinner);};&是的,我们在登录时只有一个标签。与上述解决方案的结果相同。测试用例等待整个20分钟,即使登录微调器在5分钟内运行。您确定微调器元素不仅隐藏,而且在5分钟后仍然存在于DOM中吗?在这种情况下,您需要测试
isDisplayed()
而不是
isPresent()
。登录后的No元素不会隐藏,因为我放置了logger&它返回false。记录器结果-downloadtrue[2017-01-25 09:58:29.883][INFO][default]-应用程序正在等待初始内容downloadfalse[2017-01-25 09:59:06.659][INFO][default]-应用程序正在等待初始内容您尝试过重写的示例吗?如果
isSpinnerPresent
返回false,则
返回!isSpinnerPresent
必须打破
浏览器运行的循环。等待。我注意到在你原来的帖子中,你在错误的地方传递了超时值。您正在将其传递给
然后
方法,而不是
浏览器。请稍候
。是的,我尝试了重写的示例,但结果相同。它等待整个定义的时间。与上述解决方案的结果相同。测试用例等待整个20分钟,即使登录微调器在5分钟内运行。您确定微调器元素不仅隐藏,而且在5分钟后仍然存在于DOM中吗?在这种情况下,您需要测试
isDisplayed()
而不是
isPresent()
。登录后的No元素不会隐藏,因为我放置了logger&它返回false。记录器结果-downloadtrue[2017-01-25 09:58:29.883][INFO][default]-应用程序正在等待初始内容downloadfalse[2017-01-25 09:59:06.659][INFO][default]-应用程序正在等待初始内容您尝试过重写的示例吗?如果
isSpinnerPresent
返回false,则
返回!isSpinnerPresent
必须打破
浏览器运行的循环。等待。我注意到在你原来的帖子中,你在错误的地方传递了超时值。您正在将其传递给
然后
方法,而不是
浏览器。请稍候
。是的,我尝试了重写的示例,但结果相同。它等待整个定义的时间。