Protractor测试框架的可重用功能

时间:2015-11-17 18:50:07

标签: testing protractor

我使用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();
            });
          });
        });
    }
  });
}

谢谢!

2 个答案:

答案 0 :(得分:3)

你的例子看起来不错。

最好从实用程序函数返回一个promise(如果需要,调用者可以then离开它)。但这不是必需的。

实际上,您正在调用的创建promise的方法(例如clickisDisplayed等)会隐式地使用控制流注册创建的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');