美文网首页Web前端之路
使用页面对象组织e2e测试

使用页面对象组织e2e测试

作者: 紫诺_qiu | 来源:发表于2017-01-23 14:06 被阅读187次

当我们编写e2e测试时,一个共同的模式是使用页面对象。
页面对象通过封装应用程序页面上的元素信息帮助我们使测试变得简洁。

好处

将页面元素的选择器与测试本身隔离开,这样一旦页面结构发生变化,只需要更新PageObject即可,测试部分的代码不用变动。
好的PageObject应该包含以下这些东西:

  • load()或get()函数,用来加载页面。
  • 页面上所有测试要用到的元素。
  • 页面测试需要用到的数据,比如测试表单页面时需要填入的测试数据。
  • 共享的测试用例,比如多个测试用例可能都需要用到公用的代码来assert特定的逻辑,那么这个公共逻辑可以作为函数提出来放入PageObject.
  • 每个PageObject单独放一个文件,然后每个文件export这个class,
    这样一来,如果其他的PageObject依赖这个页面,可以方便的引入。

不使用页面对象的测试实例

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();
  };
};

  • 接下来需要做的就是使用PageObject及其属性来修改测试,但要保证测试的功能本身并不发生改变。
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!');
  });
});

从上述实例中可以发现,其实在页面对象的定义中,我们不必包含对元素的操作函数,像上述实例,只是在元素上简单的调用.sendkey(xxx)或getText(),没必要将其封装成函数,直接写反而会更加直观,看代码的人也比较容易明白。如下面的例子:

  • 定义一个页面对象

    import { element, by, browser } from 'protractor';
    
    export class LoginPage {
      nameInput = element(by.css('.userName'));
      passwordInput = element(by.css('.password'));
      loginContent = element(by.css('sino-login'));
      button = element(by.css('sino-login button'));
      toast = element(by.css('.toast-message'));
    
      get() {
       browser.get('/#/login');
      }
    
    }
    
  • 测试

    import { LoginPage } from './login-page';
    
    describe('login', function () {
        let loginPage: LoginPage;
        beforeEach(() => {
          loginPage = new LoginPage();
          loginPage.get();
        });
    
        it('should display "登录失败!" when password and userName are null', () => {
          const loginContentEl = loginPage.loginContent.getText();
    
          expect(loginContentEl).toContain('登录页面');
    
          const userName = loginPage.nameInput.sendKeys('');
          const password = loginPage.passwordInput.sendKeys('');
          const button = loginPage.button;
    
          button.click();
    
          const toastElText = loginPage.toast.getText();
    
          expect(toastElText).toEqual('登录失败!');
        });
    
        it('should show message of login', () => {
    
          const userName = loginPage.nameInput.sendKeys('王佳禾');
          const password = loginPage.passwordInput.sendKeys('1');
          const button = loginPage.button;
    
          button.click();
    
          const toastEl = loginPage.toast.getText();
    
          expect(toastEl).toEqual('登录成功!');
        });
      });
    
    

相关文章

  • 使用页面对象组织e2e测试

    当我们编写e2e测试时,一个共同的模式是使用页面对象。页面对象通过封装应用程序页面上的元素信息帮助我们使测试变得简...

  • 浅析 codeceptjs

    从测试对象的粒度来说,测试分为三类:单元测试,集成测试和E2E(end to end)测试。对于E2E测试,BDD...

  • 使用Nightwatch进行E2E测试中文教程

    E2E测试 E2E(end to end)测试是指端到端测试又叫功能测试,站在用户视角,使用各种功能、各种交互,是...

  • Angular 2 E2E测试入门

    E2E测试(集成测试)是一种模拟用户行为的测试。(以demo-app首页为例) E2E测试与单元测试的区别: 单元...

  • 构建Headless 的 E2E 测试

    为什么要构建 Headless 的 E2E 测试 结合上面的原因,我们还可以 Headless结合 E2E 测试,...

  • Vue Test Utils

    test VUE中的测试 端到端的测试(E2E)黑盒测试 从UI界面的角度进行测试 E2E比较少的一般 单元测...

  • Vue.js学习系列六 —— Vue单元测试Karma+Moch

    在使用vue-cli创建项目的时候,会提示要不要安装单元测试和e2e测试。既然官方推荐我们使用这两个测试框架,那么...

  • 一步一步实现现代前端单元测试

    现在我们一步一步把各种不同的技术结合一起来完成页面的单元测试和 e2e 测试。 1 karma + mocha +...

  • Web测试(3) | Web 测试实践

    Web测试实践 VII. Web测试实践 Web测试对象 Web的页面元素 页面部分 页面清单是否完整 页面在不同...

  • Cypress前端E2E自动化测试记录

    Cypress前端E2E自动化测试记录 近期用Cypress作一个新项目的前端E2E自动化测试,对比TestCaf...

网友评论

    本文标题:使用页面对象组织e2e测试

    本文链接:https://www.haomeiwen.com/subject/cyxvbttx.html