Selenium webdriver 量角器中的显式等待不起作用
我正在使用browser.wait处理登录页面上的微调器,但它实际上在等待我作为第三个参数传递的整个时间 当主页在15分钟后出现时,它应该转到下一个测试用例,因为我已经提供了20分钟的等待时间。谁能帮我一下吗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(
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
必须打破浏览器运行的循环。等待。我注意到在你原来的帖子中,你在错误的地方传递了超时值。您正在将其传递给然后
方法,而不是浏览器。请稍候
。是的,我尝试了重写的示例,但结果相同。它等待整个定义的时间。