基于po模式改造用例_harrain的博客-程序员秘密

技术标签: Appium  

Page Object模式

Page Object
以页面为单位组织封装, 隐藏实现细节; 可读性提高, 减少findElement,click代码, 页面发生变化修改对应page,不影响整体用例

summary

原则:

  • 公共方法代表UI功能
  • 同样的行为不同结果可设计为不同的方法
  • 方法返回Page Object或者用于断言的数据
  • 不在方法内加断言
  • 不要暴露UI元素给外部
  • 不需要建模所有UI元素

解读:

  1. 以页面为单位组织封装, 页面发生变化修改对应page,不影响整体用例。
  2. UI元素定位及交互细节封装在方法内, 用公共方法代表UI功能,提高了可读性,方便快速了解用例的逻辑
  3. 公共方法返回Page Object或者用于断言的数据,不在方法内加断言。在用例模块调用page公共方法完成业务流程并断言。这样元素定位交互细节被隐藏,用例层只关注po对象方法和断言逻辑,更加易于维护。

改造:

用例组织结构

  • 使用package管理模块,基本可以分成5个模块

    • page: 完成对各个页面封装
    • driver:完成对web、Android、iOS驱动的封装
    • case:调用各个page完成业务流程并进行断言
    • data:配置文件和数据驱动(测试数据,测试步骤,断言)
    • utils: 其他便捷的功能封装
  • 使用class管理业务对象

  • 使用method实现具体行为

在这里插入图片描述
测试用例使用简单几行代码根据方法名快速识别功能

App类封装启动和退出的细节

class App:

    driver:WebDriver = None
    platform = None
    ANDROID = 1
    IOS = 2

    @classmethod
    def start(cls):
        caps = {
    }
        caps["appActivity"] = ".HomeActivity"
        caps["platformName"] = "Android"
        caps["deviceName"] = "JTK5T19917028084"
        caps["appPackage"] = "com.mintegral.sdk.demo"
        cls.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        cls.platform = cls.ANDROID
        return FrontPage(cls.driver)

    @classmethod
    def quit(cls):
        cls.driver.quit()

    @classmethod
    def getPlatform(cls):
        return cls.platform

start后返回FrontPage对象。

frontpage完成对该页面下一步操作的实现,继承自BasePage,返回下一个页面po

class FrontPage(BasePage):

    native_indicator = (By.XPATH,"//*[@text='Native']")

    def toNative(self):
        self.findElement_then_click(self.native_indicator)
        return NativeChoicePage(self.driver)

封装过程(类似于TDD风格):

  • 先根据各页面封装Page类和方法,方法可以先为空实现
  • 编写用例,不断重构page里的方法的入参和返回值
  • 开始实现page里的方法
  • 调试

BasePage封装

class BasePage:

    def __init__(self,driver:WebDriver):
        self.driver = driver

    def findElement(self,indicator):
        return self.driver.find_element(*indicator)

    def findElement_then_click(self,indicator):
        self.findElement(indicator).click()
    ......
  • 实现通用的page方法,对常用行为进行封装
  • 管理各种driver
  • 减少每个page对appium/selenium各种库的依赖
  • 可以加入异常弹框处理(广告,tips,升级,评价)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/harrain/article/details/106079544

智能推荐

跨域问题:解决跨域的三种方案_zb0002011的博客-程序员秘密

当前端页面与后台运行在不同的服务器时,就必定会出现跨域这一问题,本篇简单介绍解决跨域的三种方案,部分代码截图如下,仅供参考:方式一:使用ajax的jsonp前端代码服务器代码使用该方式的缺点:请求方式只能是get请求方式二:使用jQuery的jsonp插件插件下载网址:https://github.com/jaubourg/jquery-jsonp前端代码服务器代码使用该方式的特点:与方式一相比,请求方式不只局限于get请求,还可以是post请求,但从服务器从获取的数据依然是jsonp...

pycharm中使用清华镜像源方法(详细附图)_一只努力向上的佳佳怪的博客-程序员秘密_pycharm清华源

pycharm中使用阿里镜像源方法很多小伙伴因为导入包的时候因为下载速度过慢而头疼,这是因为pycharm下载包的默认源是国外网站(https://pypi.python.org/simple),这时候我们可以用清华镜像或者其他镜像源1、首先进入设置界面(File-Settings)2、进入安装包的界面,点击右边的+号3、点击Manage Repoditories,这个就是设置仓库4、添加清华镜像源,点击OK5、配置成功...

PyCharm vs Spyder:两个Python IDE的快速比较_cumei1658的博客-程序员秘密

If you have followed my blog you may have noticed that a lot of focus have been put on how to learn programming (particularly in Python). I have also written about Integrated Development Environments ...

961计算机组成原理,2018考研华中科技大学961计算机组成原理(二)考试大纲_祈盟的博客-程序员秘密

华中科技大学研究生考试大纲为广大想报考华中科技大学的考生划出了大致的考试范围以及试卷的结构和题型,是广大考研学生的重要参考文件之一。下面是研招网小编为大家整理的最新2018考研华中科技大学961计算机组成原理(二)考试大纲,以供大家参考。硕士研究生入学考试大纲――《计算机组成原理(二)》科目代码(961)一、考试性质《计算机组成原理》是报考我校协和医院生物医学工程学硕士的专业基础课,旨在考察学生是...

JS本地存储和会话存储的区别_Serena_tz的博客-程序员秘密_本地存储和会话存储的区别

1、localStorage本地存储localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。2、sessionStorage会话存储sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。源生接口可以接受,亦可再次封装来对Object

随便推点

RxDataSources与TableView实现界面展示(一)_发烧的小龙虾的博客-程序员秘密

// ViewController.swift// RxSwiftTest//// Created by travey on 2018/11/5.// Copyright 2018年 ZhouShijie. All rights reserved.import UIKitimport RxSwiftimport RxCocoaimport SnapKitimp...

软件学院天梯赛参赛队员第一次训练 L2-1 红豆生南国 (25 分)(完全二叉树,树的遍历,重建二叉树,DFS)_forget……的博客-程序员秘密

题目:有诗云: 相思 (王维 唐)红豆生南国, 春来发几枝。愿君多采撷, 此物最相思。那么,我们来采红豆吧!假设红豆树是这个样子的:这种红豆树的特点是:每个结点都有一个正整数编号,标在结点内部。结点的编号各不相同。 最上方一层结点是“红豆”(图中红圈所示的5个结点),这一层被称之为红豆层。 树的根结点、左子结点、右子结点、左子树、右子树等的定义与“数据结构”中的“二叉树”相同,但它毕竟是“自然界中的树”,树根在最下方,如图中的结点5 图中这棵红豆树...

华中科技大学计算机组成原理慕课第四章 存储系统(一) 单元测验(习题+答案+详细解析)_Code_流苏的博客-程序员秘密_sram中的存储单元

华中科技大学计算机组成原理慕课第四章 存储系统(一) 单元测验(习题+答案+详细解析)

Pycharm IDE安装pandas库失败解决方法_ChiFanLAM的博客-程序员秘密_安装pandas库失败

Pycharm IDE安装pandas库失败解决方法作为一名python新手,我们利用Pychram IDE进行编程时总是会遇到一些配置上的难题。比如,在配置第三方库文件时,我们会遇到漫长的等待安装时间后,却发现安装失败!!!具体的安装失败错误提示为:Error occur when installing " "找遍了各种方法,发现下面的解决方案真的屡试不爽:进入Pycharm的terminal:输入:python -m pip install -upgrade pip或者在P

linux 挂载存储命令,Linux挂载存储及命令_知乎汽车的博客-程序员秘密

常用命令一、网卡部分1、确认IP地址命令ifconfigifconfig -aifconfig ethX2、关闭命令ifdown ethXservice network stop3、开启命令ifup ethXservice network start4、重启命令service network restart/etc/init.d/network restart5、修改IP地址命令vi /etc/s...

华东理工大学计算机组成原理试题,华中科技大学计算机组成原理1999年考研真题考研试题硕士研究生入学考试试题(原华东理工大学)..._Z-JO的博客-程序员秘密

华中理工大学1999硕士入学计算机组成原理真题一.填空(每空1分,共20分)1.计算机中数值数据表示长采用的格式有 和 两种。2.已知十进制数,则相应的二进制数X= ,[X]补= 。3.若X=-0.X1X2……Xn,则[X]原= ,[-X]补= 。4.主机与外部设备之间以软件方式控制信息交换的方式有 ...

推荐文章

热门文章

相关标签