测试开发学习——PO模式

PO模式

PO是PageObject(页面对象)的缩写,PO模式是自动化测试项目开发中最常用的一种设计模式,PO模式的核心思想就是通过对页面元素的封装来减少代码的冗余性,提高代码的可维护性,假设后期维护中,若定位元素发生变化,需要调整页面元素封装的代码,从而提高测试用例的可维护性,以及代码的可读性。

PO模式可以把一个页面分成三层:对象库层。操作层、业务层

  • 对象层:主要封装定位元素的方法
  • 操作层:封装对元素的操作
  • 业务层:将一个或者多个操作组合成一个业务功能,以登录功能为例:需要输入用户名、输入密码、点击登录按钮三个操作

不使用PO模式

假设我们要对一个登录页面做UI自动化测试,以某知名同性交友网站。假设需要测试多个登录成功、登录失败等多个场景,以下面这种写法就要写很多的冗余代码,而且并不好维护,假设前端将页面元素进行调整,我们需要修改脚本,就需要大量的重构,并且这样的写法可读性也不高。

Feature('demo');

Scenario('loginOk',  ({ I }) => {
    I.amOnPage('https://github.com/login');
    I.see('GitHub');
    I.fillField({xpath : "//input[@name='login']"},'test@qq.com');
    I.fillField({css : '#password'},'123456');
    I.click({xpath : "//input[@type='submit']"});
    I.see('Home');
});
Scenario('loginFail',  ({ I }) => {
    I.amOnPage('https://github.com/login');
    I.see('GitHub');
    I.fillField({xpath : "//input[@name='login']"},'test@qq.com');
    I.fillField({css : '#password'},'666666');
    I.click({xpath : "//input[@type='submit']"});
    I.see('Home');
});

使用PO模式

同样是登录假设使用的PO模式,代码如下:

封装页面对象LoginPage和对应的操作方法

const { I } = inject();
module.exports = {
    // 定义页面元素选择器
    fields : {
        usernameInput : {xpath : "//input[@name='login']"},
        passwordInput : {css : "#password"},
        loginButton : {xpath : "//input[@type='submit']"}
    },
    // 定义页面元素操作方法
    enterUsername(username) {
        I.fillField(this.fields.usernameInput, username);
    },
    
    enterPassword(password) {
        I.fillField(this.fields.passwordInput, password);
    },
    
    clickLogin() {
        I.click(this.fields.loginButton);
    },
      
    login(username, password) {
        this.enterUsername(username);
        this.enterPassword(password);
        this.clickLogin();
    }
}

测试的业务逻辑

const loginPage = require('../pages/LoginPage')

Feature('demo');

Scenario('loginOk',  ({ I }) => {
    I.amOnPage('https://github.com/login');
    I.see('GitHub');
    loginPage.login('test@qq.com','test');
    I.see('Home');
});
Scenario('loginFail',  ({ I }) => {
    I.amOnPage('https://github.com/login');
    I.see('GitHub');
    loginPage.login('test@qq.com','666');
    I.see('Incorrect username or password.');
});

通过PO模式可以让测试脚本的可读性和可维护性更强,将页面对象和操作进行封装后可以被后续的多个测试场景复用,避免页面元素发生变化就大量修改代码。这种解耦合分离思想,在UI自动化测试中是十分推荐的,包括后续的错误日志记录,测试报告生成都可以分离到指定目录中,让整个脚本的结构清晰便于定位问题和维护。


  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的三毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值