霍格沃兹测试开发

知名产品 web 自动化测试实战

霍格沃兹测试开发学社 ceshiren.com

课程目录

  • 作业讲解
  • PO 设计模式
  • 课堂实战
  • 实战讲解

成果展示

  • 工程结构
  • 运行效果

作业讲解

  • 通讯录页面:添加成员
  • 通讯录页面:添加部门

第三回:PO 设计模式

POM 建模原则

  • 属性意义
    • 不要暴露页面内部的元素给外部
    • 不需要建模 UI 内的所有元素
  • 方法意义
    • 用公共方法代表 UI 所提供的功能
    • 方法应该返回其他的 PageObject 或者返回用于断言的数据
    • 同样的行为不同的结果可以建模为不同的方法
    • 不要在方法内加断言

课堂实战

  • 目标:首页的添加成员场景的线性代码
  • 要求:进行 PO 设计模式的改造
    • 使用类去封装每个页面的元素和操作细节
    • 创建 BasePage 提供 driver 相关方法
    • 用例中链式调用和断言

PO 改造思路

@startmindmap
* HowToDo
** 梳理测试用例
*** 业务操作流程
*** 前置后置动作
** 构造PO模型
*** 页面类和方法
** 编写测试用例
*** 链式调用
** 业务具体实现
*** 封装BasePage
*** 实现页面方法
*** 封装页面元素
@endmindmap

实战讲解:用例

  • 用例分析

autonumber

scale 400 height

participant 测试用例 as code
participant 登录页 as LoginPage
participant 首页 as HomePage
participant 添加成员页 as AddMemberPage
participant 通讯录页 as ContactPage

code -> LoginPage: 打开登录页
LoginPage -> HomePage: 扫码登录
HomePage -> AddMemberPage: 点击添加成员
AddMemberPage -> ContactPage: 填写成员信息
ContactPage -> code: 获取冒泡文本
code -> code: 断言结果

实战讲解:建模

  • 用类封装页面细节
    • 属性:页面元素
    • 方法:页面行为
@startuml

class BasePage{

  __init__(self)
  do_click(self)
  do_send(self)

}

class LoginPage{
    login(self)
}

class HomePage{
    __BTN_ADD_MEMBER
    click_add_member(self)
}

class AddMemberPage{
    __INPUT_NAME
        __INPUT_ID
    fill_in_info(self)
}

class ContactPage{
    __TEXT_TIPS
    get_tips(self)
}

BasePage <|-- LoginPage: 继承
BasePage <|-- HomePage: 继承
BasePage <|-- AddMemberPage: 继承
BasePage <|-- ContactPage: 继承

@enduml

课后作业

  • 使用 PO 设计模式改造作业代码
    • 通讯录页面:添加成员
    • 通讯录页面:添加部门