背景
PageObject模式是自动化测试中的一个最佳实践,它具备一下特征:
- 将每个页面或者待测试对象封装成一个类,类里包括了页面上所有的元素及它们的操作方法
- 测试代码和被测页面代码解耦
PageObject在Cypress中的应用
以测试kitten为例,首先在cypress文件夹下新建pages文件夹,integration文件夹下新建testcases文件夹,pages文件夹下新建文件commonPage.js
// commonPage.js page公共部分export default class CommonPage{constructor(){}isTargetPage(){cy.visit("https://kitten4.codemao.cn/");cy.url().should('eq', this.url);}}
其次在pages文件夹下新建文件login.js
import CommonPage from './common/commonPage'export default class LoginPage extends CommonPage {constructor() {super()this.closeguideElement = 'div[data-report-click="新手引导-弹窗-关闭"]'this.okElement = 'div[style="border-radius: 16px;"]'this.loginBtnElement = 'div[data-report-click="用户信息-登录"]'this.usernameElement = 'input[maxlength="100"]'this.passwordElement = 'input[type="password"]'this.submitBtnElement = 'div[data-report-click="用户信息-密码登录"]'this.url = 'https://kitten4.codemao.cn/'}get closeguide() {return cy.get(this.closeguideElement); // 新手弹窗}get ok() {return cy.get(this.okElement); // 关闭引导页后,提示引导页路径}get loginbtn() {return cy.get(this.loginBtnElement); // 点击右上角登陆}get username() {return cy.get(this.usernameElement); // 输入账号}get password() {return cy.get(this.passwordElement); // 输入密码}get submit() {return cy.get(this.submitBtnElement); // 点击登陆}login(username, password) {this.closeguide.click();this.ok.click();this.loginbtn.click();this.username.type(username);this.password.type(password);this.submit.click()}}
最后在testcases文件夹下新建文件testLogin.js
///<reference types='cypress' />import LoginPage from '../../../page/login'describe('kitten登陆测试', function(){const username = xxxxxx;const password = 111111;it('测试登陆成功', function(){const logininstance = new LoginPage()logininstance.isTargetPage();logininstance.login(username, password);cy.url().should('include', 'https://kitten4.codemao.cn/')});});
