protractorjs中的browser.wait调用太多了

时间:2016-01-21 06:22:19

标签: javascript selenium asynchronous selenium-webdriver protractor

我测试注销流程的测试步骤是,

1)点击退出按钮

2)等待网址更改为login.html

3)等待加载登录页面文本字段。

代码看起来像,

//wait for logout menu/button    
browser.wait(function(){
  return element(by.buttonText('Log out')).isPresent()
})
element(by.buttonText('Log out')).click()
//wait for url to change to login.html
browser.wait(function(){
  return browser.getCurrentUrl().then(function(url){
    return url.indexOf("login") != -1
  })
})
//wait for login page text boxes
browser.wait(function(){
  return element(by.css('[type=text]')).isPresent()
})

这使我的代码变得冗长,因为我将每个动作包含在browser.wait调用中。 有没有办法可以避免browser.wait。我尝试添加,

browser.manage().timeouts().implicitlyWait(5000)

但是,我得到No element found using locator: by.buttonText("Log out")错误。

2 个答案:

答案 0 :(得分:3)

量角器有内置的ExpectedConditions支票,您不必一直自己编写自定义功能。以下是如何等待元素可见 -

var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.buttonText('Log out'))), 10000); //Checks only if element is present in DOM
browser.wait(EC.visibilityOf(element(by.buttonText('Log out'))), 10000); //Checks if element is present in DOM and visible to user on page

您还可以创建自定义函数,如另一个答案所示。希望这会有所帮助。

答案 1 :(得分:2)

如果您不止一次地做同样的事情,它往往有助于为它创建一个帮助函数。添加到您的帮助文件中的内容如下:

this.waiterFunc = function(element){
        browser.wait(function() {
            return element.isPresent();
        })
    };

然后在你的主要课程中你可以做以下事情:     helper.waiterFunc(element(by.buttonText('退出')));

我不确定避免将browser.wait作为等待在特定时间访问元素的过程中的一个不可或缺的步骤。如果你不等,那么你将开始变得讨厌"元素在时间x"错误