是否有工具将Protractor测试拆分为组件文件?

时间:2015-10-30 18:07:18

标签: angularjs jasmine automated-tests protractor

我正在使用Protractor(angularJS / Jasmine框架)构建可扩展的自动化测试套件。 只要我的所有变量和函数以及jasmine都在同一个文件中,它就会运行半好。 但我所做的每一次努力都将其分解为出口/需求是一场噩梦。 是否有一个工具可以找到我的测试部分并自动重新格式化并将其分解为单个文件和文件夹,以便事物真正运行?

谢谢!

1 个答案:

答案 0 :(得分:5)

我不知道你想要的工具。但是如果我是你,我会继续使用node的共享文件的方式(export / require)。一旦你了解它,如果你保持干净整洁,你可以以“干净”的方式发展你的应用程序。

修改

正如@MBielski所说,页面对象模型在维护测试代码时也很有用。

Selenium团队的定义:

  

Page Object是一种在测试中变得流行的设计模式   自动化,用于增强测试维护和减少代码   复制。页面对象是一个面向对象的类,用作   AUT页面的接口。然后测试使用的方法   这个页面对象类,只要他们需要与该页面进行交互   的UI。好处是,如果UI更改为页面,则   测试本身不需要更改,只需要页面内的代码   对象需要改变。随后所有的变化都支持新的   用户界面位于一个地方。

现在是一个不使用页面对象然后使用它的例子。

<强>没有

describe('angularjs homepage', function() {
  it('should greet the named user', function() {
    browser.get('http://www.angularjs.org');
    element(by.model('yourName')).sendKeys('Julie');
    var greeting = element(by.binding('yourName'));
    expect(greeting.getText()).toEqual('Hello Julie!');
  });
});

。通过

var AngularHomepage = function() {
  var nameInput = element(by.model('yourName'));
  var greeting = element(by.binding('yourName'));

  this.get = function() {
    browser.get('http://www.angularjs.org');
  };

  this.setName = function(name) {
    nameInput.sendKeys(name);
  };

  this.getGreeting = function() {
    return greeting.getText();
  };
};


describe('angularjs homepage', function() {
  it('should greet the named user', function() {
    var angularHomepage = new AngularHomepage();
    angularHomepage.get();

    angularHomepage.setName('Julie');

    expect(angularHomepage.getGreeting()).toEqual('Hello Julie!');
  });
});

您还可以定义各种测试套件。看一下这个配置文件:

exports.config = {

  seleniumAddress: 'http://localhost:4444/wd/hub',

  capabilities: {
    'browserName': 'chrome'
  },

  // Spec patterns are relative to the location of the spec file. They may
  // include glob patterns.
  suites: {
    homepage: 'tests/e2e/homepage/**/*Spec.js',
    search: ['tests/e2e/contact_search/**/*Spec.js',
      'tests/e2e/venue_search/**/*Spec.js']
  },

  jasmineNodeOpts: {
    showColors: true, // Use colors in the command line report.
  }
};