PageObject 设计模式
Page Object模式六大原则
PageObject模式原则
- 方法意义
- 用公共方法代表UI所提供的服务
- 方法应该返回其他的PageObject或者返回用于断言的数据
- 同样的行为不同的结果可以建模为不同的方法
- 不要在方法内加断言
- 字段意义
- 不要暴露页面内部的元素给外部
- 不需要建模UI内的所有元素
PO模式封装的主要组成元素
- Page对象:完成对页面的封装
- Driver对象:完成对web、android、ios、接口的驱动
- 测试用例:调用Page对象实现业务并断言
- 数据封装:配置文件和数据驱动
- Utils:其他功能封装,改进原生框架不足
测试框架改进
测试策略
课上代码
上面的代码只是一个最基本的框架,真正在工作的项目中,使用这个框架也没有问题,不过需要根据你的项目需要对这个框架进一步的优化,比如基类封装哪些常用的方法使我们的测试更利于维护,重复的代码更少?这里给大家提供一个思路:
- BasePage 类里我们封装了 find 方法,这个方法的使用频率是非常高的,几乎每一两步都会用, 那还有哪些常用的操作?比如,查找元素需要使用 xpath 查找,每次写一堆的
//*[@text='定位名称']
,这些是不是很麻烦 ?考虑一下封装一个 find_by_text() 方法
def text(self,text):
return (By.XPATH,f"//*[@text='{text}']")
def find_by_text(self,text):
return self.find(self.text(text))
是不是以后写的代码就简单了很多?
- 除了定位器想想哪些操作也非常频繁?
- back() 返回方法
- wait() 等待方法 显式等待
- screenshot() 工作中可能会需要用到截图功能
- get_log() 获取日志方法
…
可以封装的有很多, 不过还是需要根据你的项目需要,你实际中用到哪些常用的,就可以进行封装,这里只是给大家引个思路。比如,你需要每执行一步操作都截一张图,你就可以封装一个截图的操作,甚至可以将这个操作放到 find 方法里面。