我使用Protractor Test Framework,需要对不同的情况使用相同的操作。与身份验证程序一样。
问题是:在量角器中使用自己的函数的正确方法是什么?
我记得这个工具有效:1)异步和2)它的函数返回promises。
重用函数必须返回make的可能性.then()操作或者此函数可能没有返回值吗?
示例(正确或否):
describe('Login procedure', function() {
it('Login Username', function () {
browser.get('anurl.com');
auth('username', 'password').then(function(){console.log('NICE TO MEET YOU')});
});
var auth = function(loginstr, passwordstr) {
return element(by.css('div[class="login"]')).isDisplayed().then(function (result) {
if (result) {
element(by.css('input[name="email"]')).clear().sendKeys(loginstr).then(
function () {
element(by.css('input[name="password"]')).clear().sendKeys(passwordstr).then(function () {
element(by.css('button[class="submit"]')).click().then(function () {
return element(by.id('welcome')).isPresent();
});
});
});
}
});
}
谢谢!
答案 0 :(得分:3)
你的例子看起来不错。
最好从实用程序函数返回一个promise(如果需要,调用者可以then
离开它)。但这不是必需的。
实际上,您正在调用的创建promise的方法(例如click
或isDisplayed
等)会隐式地使用控制流注册创建的promise,因此隐式同步不会受到影响将调用重构为您自己的函数。
有关类似的方法,请参阅Protractor Page Objects。
答案 1 :(得分:0)
我们的团队使用Orchid-js与Jasmine和Protractor。
这是一个扩展,可以自动定义您自己的功能。
在这种情况下,您的代码仍然有效,您也可以自动重用“登录过程”和“登录用户名”功能。
Describe('Login procedure', function(username,password) {
It('Login Username', function (username,password) {
browser.get('anurl.com');
auth(username, password).then(function(){console.log('NICE TO MEET YOU')});
})(username,password);
})('username','password');
然后再重复使用
Describe('Login procedure')('differentUsername','differentPassword');