【问题标题】:E2E test using Entities使用实体进行 E2E 测试
【发布时间】:2015-06-14 01:00:06
【问题描述】:

我正在尝试优化我的 E2E 测试以结合实体的使用。

我们的测试基本上是将数据填充到网页上的表单中。我们的测试使用 PageObject 方法,其中我们的 PageObject 将我们的元素存储在变量中,并且我们还有包含与存储在 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');

在我们的规范文件中,我们有大约 100 行这段代码,据我所知,这不是很有效。我想删除这种风格并改用实体,但是我不确定我将如何去做,因此我为什么要来这里。

我的一个朋友给了我一个提示,告诉我该怎么做,这是他提供给我的:

规格文件:

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

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

我尝试了以下方法,但似乎无法将 nameEntity 中的值输入到元素本身中。

pageObject 文件:

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

【问题讨论】:

    标签: angularjs protractor angularjs-e2e e2e-testing


    【解决方案1】:

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

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

    规格...

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

    页面对象...

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

    【讨论】:

    • 你好盐水,谢谢你的帮助!对此有几个问题。那么在 pageObject 中,我应该导入我的规范文件以返回 nameEntity = {} 吗? this.setFirstNameField 也应该包含“sendKeys()”吗?我看到一个 TypeError: Object function has no method 'sendKeys' 用于 setFirstName 和 setLastName 方法。这是因为我在 populateUIWithEntity 和 setFirstName 这两种方法上都有“sendKeys()”吗?
    • 我将测试数据保存在它自己的文件中,在一个名为 data 的文件夹中。例如。数据/userData.js 。然后我根据需要需要我的规范中的数据。这样,如果数据发生变化,我只需在一个地方针对所有规格进行更改。是的,抱歉... sendKeys 应该保留在单独的操作方法中(例如setFirstNameField()),而不是在辅助方法中(populateUIWithNameEntity())。我更新了我的答案...
    • 啊,这是有道理的,而不是将测试数据保留在测试本身中。感谢您的回答!打算试一试,然后发表评论或将其标记为答案:)
    • 不用担心。请随意查看我的example code on Github 以获取...嗯...一个示例。
    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 2022-12-16
    • 2020-11-10
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多