背景
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/')
});
});