使用实体进行E2E测试

时间:2015-04-08 21:04:19

标签: angularjs protractor angularjs-e2e e2e-testing

我试图优化我的E2E测试以合并实体的使用。

我们的测试基本上是将数据填充到网页上的表格中。我们的测试使用PageObject方法,其中我们的PageObject将元素存储在变量中,并且我们还有包含与PO文件中存储的元素的交互的变量。

我们的spec文件调用PO文件并将数据输入到每个元素中(这只是我们正在做的事情的例子):

PO文件:

this.firstNameField = by.model('firstName');
this.lastNameField = by.model('lastName');

this.setFirstNameField = function(firstname) {
    element(this.firstNameField).sendKeys(firstname);
};

this.setLastNameField = function(lastname) {
    element(this.lastNameField).sendKeys(lastname);
};

规格文件:

pageObject.setFirstNameField('TestName');
pageObject.setLastNameField('TestLastName');

在我们的spec文件中,我们有大约100行代码,这些代码并不是很有效。我想删除这种风格并使用实体代替,但是我不确定我将如何处理这个问题,因此我为什么要来这里。

我的一位朋友给了我一个关于我如何解决这个问题的提示,以下是他为我提供的信息:

spec文件:

var nameEntity = {
      firstName: 'TestName',
      lastName: 'TestLastName'
    };
pageObject.PopulateUIWithNameEntity(nameEntity);

现在我知道我可以将nameEntity切换为存储在pageObejct文件中,但是我并不完全确定应该如何创建PopulateUIWIthNameEntity。

我已经尝试过以下操作,但我似乎无法将nameEntity中的值输入到元素本身。

pageObject文件:

this.PopulateUIWithNameEntity = function(nameEntity) {
    element(this.setFirstNameField).sendKeys(nameEntity);
  };

1 个答案:

答案 0 :(得分:1)

你很亲密......只需要一点点重构。

将测试数据添加到对象(哈希)绝对是个好主意。然后你只需要在方法中从中提取元素。您还已经为每个单独的操作设置了单独的方法......所以您只需要使用它们。

...规范

var nameEntity = {
  firstName: 'TestName',
  lastName: 'TestLastName'
};
pageObject.populateUIWithNameEntity(nameEntity);

页面对象...

this.populateUIWithNameEntity = function(nameEntity) {
  this.setFirstNameField(nameEntity.firstName);
  this.setLastNameField(nameEntity.lastName);
};