19

E2E テスト用に Protractor を使い始めたばかりですが、テスト ケースの構造に少し問題があります。

テストを個別の仕様に分割して別の仕様から呼び出すことができるかどうか、またはこれを処理するための適切なヘルパー関数を作成するにはどうすればよいかわかりません。

リピーターで要素を見つけています。次に、リピーターの各要素の操作ごとにテストを行いたいと思います。このような並べ替え:

describe('tasty', function () {
    'use strict';
    var ptor;

    beforeEach(function () {
        ptor = protractor.getInstance();
        ptor.get('http://localhost:8000/');
    });

    it('Should sample three tasty fruits of every kind on my shopping list.', function () {
        ptor.findElement(protractor.By.className('fruitstore')).click();
        var fruitshelves = ptor.findElements(protractor.By.repeater('fruit in fruits').column('header'));

        fruitshelves.then(function(arr) {
            for (var i=0;i<arr.length; i++) { 
                // Pick up three fruits of this kind from the shelf and put in shopping cart
                // Should be listed on my shopping list 
                // Open the wallet
                // Should have money
                // Pay for the fruits and put it in your shopping bag
                // Should be able to complete the transaction

                // For each one of the fruits in your shopping bag
                // Take a bite
                // Should be tasty
            }
        });
    });
});
4

4 に答える 4

14

@langliman の回答に基づいて、目的の動作を実現することができました。

注意 login.spec.jsLogin.page.jsて、同じフォルダーに配置する必要があります。

Login.page.js ファイル:

var LoginPage = function (ptor) {
    //following PageObject pattern define the functions here.
}

module.exports.getLoginPage = function (ptor) {
    return new LoginPage(ptor);
};

login.spec.js ファイル:

(function () {
    'use strict';

  describe('login page', function () {

        var ptor = protractor.getInstance();
        var loginPageBuilder = require('./Login.page.js');
        var loginPage = loginPageBuilder.getLoginPage(ptor);

        it('should login as admin', function () {
            loginPage.visit();
            loginPage.enterUsername('user');
            loginPage.enterPassword('password');
            loginPage.login();
        });
  });

}());
于 2014-05-14T10:46:47.613 に答える
7

ヘルパー メソッドだけでなく、共有セットアップと前/後関数が必要な場合、1 つの解決策は、テストからスペック ヘルパーを要求する代わりに、スペック ヘルパーからテストを要求することです。

conf.js

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['e2e/spec.js']
}

e2e/spec.js

var chai = require('chai'),
    homepage = require('./homepage.js'),
    signin = require('./signin.js');

chai.should()
browser.baseUrl = 'http://localhost:3000'

homepage.test()
signin.test()

e2e/homepage.js

exports.test = function() {
  describe('homepage', function() {
    it('should have the right title', function() {
      browser.get('/')

      browser.getTitle().then(function(title){
        title.should.eq('Home')
      })
    });
  });
}

e2e/signin.js

exports.test = function() {
  describe('signin', function() {
    it('should have the right title', function() {
      browser.get('/signin')

      browser.getTitle().then(function(title){
        title.should.eq('Sign in')
      })
    });
  });
}
于 2014-10-30T19:07:07.313 に答える