背景

PageObject模式是自动化测试中的一个最佳实践,它具备一下特征:

  • 将每个页面或者待测试对象封装成一个类,类里包括了页面上所有的元素及它们的操作方法
  • 测试代码和被测页面代码解耦

PageObject在Cypress中的应用

以测试kitten为例,首先在cypress文件夹下新建pages文件夹,integration文件夹下新建testcases文件夹,pages文件夹下新建文件commonPage.js

  1. // commonPage.js page公共部分
  2. export default class CommonPage{
  3. constructor(){
  4. }
  5. isTargetPage(){
  6. cy.visit("https://kitten4.codemao.cn/");
  7. cy.url().should('eq', this.url);
  8. }
  9. }

其次在pages文件夹下新建文件login.js

  1. import CommonPage from './common/commonPage'
  2. export default class LoginPage extends CommonPage {
  3. constructor() {
  4. super()
  5. this.closeguideElement = 'div[data-report-click="新手引导-弹窗-关闭"]'
  6. this.okElement = 'div[style="border-radius: 16px;"]'
  7. this.loginBtnElement = 'div[data-report-click="用户信息-登录"]'
  8. this.usernameElement = 'input[maxlength="100"]'
  9. this.passwordElement = 'input[type="password"]'
  10. this.submitBtnElement = 'div[data-report-click="用户信息-密码登录"]'
  11. this.url = 'https://kitten4.codemao.cn/'
  12. }
  13. get closeguide() {
  14. return cy.get(this.closeguideElement); // 新手弹窗
  15. }
  16. get ok() {
  17. return cy.get(this.okElement); // 关闭引导页后,提示引导页路径
  18. }
  19. get loginbtn() {
  20. return cy.get(this.loginBtnElement); // 点击右上角登陆
  21. }
  22. get username() {
  23. return cy.get(this.usernameElement); // 输入账号
  24. }
  25. get password() {
  26. return cy.get(this.passwordElement); // 输入密码
  27. }
  28. get submit() {
  29. return cy.get(this.submitBtnElement); // 点击登陆
  30. }
  31. login(username, password) {
  32. this.closeguide.click();
  33. this.ok.click();
  34. this.loginbtn.click();
  35. this.username.type(username);
  36. this.password.type(password);
  37. this.submit.click()
  38. }
  39. }

最后在testcases文件夹下新建文件testLogin.js

  1. ///<reference types='cypress' />
  2. import LoginPage from '../../../page/login'
  3. describe('kitten登陆测试', function(){
  4. const username = xxxxxx;
  5. const password = 111111;
  6. it('测试登陆成功', function(){
  7. const logininstance = new LoginPage()
  8. logininstance.isTargetPage();
  9. logininstance.login(username, password);
  10. cy.url().should('include', 'https://kitten4.codemao.cn/')
  11. });
  12. });