我测试注销流程的测试步骤是,
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")
错误。
答案 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"错误