代码分层原因

  • 公司小:一个人负责所有工作 → 业务简单,代码量少,单文件
  • 公司大:分多个部门,分工协作 → 业务复杂,代码量大,多文件

PageObject模式

  • 引入PageObject的原因
    • 测试用例存在大量元素定位和操作细节,而UI会经常变动
    • 希望提升自动化测试代码的复用性和维护性
  • PageObject简称为PO
    • PageObject是一种把一个网页(或叫做页面)或网页里的一块区域封装为为一个对象的设计模式(设计思想),用一个类来实现它的对象内的信息管理,将当前页面里所有元素定位和操作的细节隐藏到这个页面对象里,形成一个个可以被调用的对象
    • 通过调用某页面对象里封装的API,testcase可以完成该页面的操作
PageObject设计模式核心思想
  • 测试对象(页面)和测试用例(操作业务流程)分离
    • 调用所需页面对象中的方法,组成测试用例
    • 在用例中,是看不到元素定位和元素操作的
  • 优势
    • 使代码能在页面元素发生改变后,尽量减少测试脚本的改动量
    • 最大程度支持代码的可重复性使用
    • 使得测试框架结构合理、清晰、代码更加模块化、避免冗余、耦合性过高
模块流程图

Selenium32-PageObject模式_实例化

具体实现步骤

Selenium32-PageObject模式_实例化_02

  • 创建一个页面对象类
  • Selenium32-PageObject模式_实例化_03


  • 在页面对象类的构造方法中,传递webdriver参数
  • Selenium32-PageObject模式_测试用例_04


  • 在测试用例的类中,实例化页面对象类,并且传递在测试用例中已经实例化的webdriver对象
    • testcase里新建测试用例Python unit test类型的模块testcase9001.py
    • 创建setUp和tearDown方法
    • testcase9001.py里导入LoginPage
    • 在测试方法里实例化LoginPage(创建LoginPage类型对象)
  • 在页面对象类中,编写该页面的所有操作的方法
  • Selenium32-PageObject模式_测试用例_05


Selenium32-PageObject模式_实例化_06

  • 在测试类中,调用这些操作方法
  • Selenium32-PageObject模式_测试用例_07


  • Selenium32-PageObject模式_元素定位_08


PageObject总结

对脚本实现进行架构设计,通常做法是分多层

  • 页面对象层:页面对象层用于实现页面元素和一些特殊控件的操作
  • 业务层:业务层是我们真正的测试用例的步骤
  • 数据层:用于存放我们的测试数据
    优势:
  • 集中管理元素对象,便于应对元素的变化
  • 集中管理一个page内的公共方法,便于测试用例的编写
  • 后期维护方便,不需要重复的复制和修改代码



作者:暄总-tester