Angularjs 使用实体的E2E测试

Angularjs 使用实体的E2E测试,angularjs,protractor,angularjs-e2e,e2e-testing,Angularjs,Protractor,Angularjs E2e,E2e Testing,我正试图优化我的E2E测试,以结合实体的使用 我们的测试基本上是将数据填入网页上的表格中。我们的测试使用PageObject方法,其中PageObject将元素存储在变量中,并且我们还有包含与PO文件中存储的元素交互的变量 我们的spec文件就是调用PO文件并将数据输入到每个元素中的文件,类似于(这只是我们正在做的示例): 采购订单文件: this.firstNameField = by.model('firstName'); this.lastNameField = by.model('las

我正试图优化我的E2E测试,以结合实体的使用

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

我们的spec文件就是调用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行代码,从我所知道的来看,这些代码不是很有效。我想删除这个样式,改用实体的,但是我不确定我会怎么做,所以我来这里

我的一个朋友给了我一个暗示,告诉我该怎么做,以下是他给我的:

等级库文件:

var nameEntity = {
      firstName: 'TestName',
      lastName: 'TestLastName'
    };
pageObject.PopulateUIWithNameEntity(nameEntity);
现在我知道我可以切换存储在pageObejct文件中的nameEntity,但是我不确定应该如何创建PopulateUIWIthNameEntity

我尝试了以下方法,但似乎无法让它将名称实体中的值输入元素本身

页面对象文件:

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

你很接近。。。只是需要一点重构

将测试数据添加到对象(散列)绝对是个好主意。然后,您只需要在方法中从中提取元素。对于每个单独的操作,您也已经有了单独的方法。。。所以你只需要使用它们

规格

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

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

嘿,谢谢你的帮助!我有一些关于这个的问题。因此,在pageObject中,我是否应该导入spec文件以返回nameEntity={}?this.setFirstName字段是否还应包含“sendKeys()”?我看到一个TypeError:对象函数没有setFirstName和setLastName方法的方法“sendKeys”。这是因为我在populateUIWithEntity和setFirstName这两个方法上都有“sendKeys()”?我将测试数据保存在它自己的文件中,保存在名为data的文件夹中。例如data/userData.js。然后,根据需要,我需要规范中的数据。这样,如果数据发生更改,我只需在一个地方对所有规格进行更改。是的,对不起。。。SendKey应该保留在单个操作方法中(例如,
setFirstNameField()
),而不是帮助器方法中(
PopulateWithNameEntity()
)。我更新了我的答案…啊,这很有意义,而不是把测试数据保存在测试中。谢谢你的回答!我将对此进行一次尝试,并发表评论或将其标记为答案:)不用担心。请随便看看我的。。。好。。。举个例子。