【Appium】Appium 企业微信实战3 -

PageObject 设计模式

Page Object模式六大原则

PageObject模式原则

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

PO模式封装的主要组成元素

  • Page对象:完成对页面的封装
  • Driver对象:完成对web、android、ios、接口的驱动
  • 测试用例:调用Page对象实现业务并断言
  • 数据封装:配置文件和数据驱动
  • Utils:其他功能封装,改进原生框架不足

测试框架改进

测试策略

课上代码

上面的代码只是一个最基本的框架,真正在工作的项目中,使用这个框架也没有问题,不过需要根据你的项目需要对这个框架进一步的优化,比如基类封装哪些常用的方法使我们的测试更利于维护,重复的代码更少?这里给大家提供一个思路:

  1. 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))

是不是以后写的代码就简单了很多?

  1. 除了定位器想想哪些操作也非常频繁?
    • back() 返回方法
    • wait() 等待方法 显式等待
    • screenshot() 工作中可能会需要用到截图功能
    • get_log() 获取日志方法

可以封装的有很多, 不过还是需要根据你的项目需要,你实际中用到哪些常用的,就可以进行封装,这里只是给大家引个思路。比如,你需要每执行一步操作都截一张图,你就可以封装一个截图的操作,甚至可以将这个操作放到 find 方法里面。