android ui自动化框架选型,Appium UI 自动化框架之我见 (开源)

APP UI Automation Framework

一个基于 Appium 1.8.1、TestNG,Page Object 模式开发的 UI 自动化测试框架

介绍文档

结构图

83fd69823c3a2790c924a76995135e29.png

基本功能

每秒生成一次截图

通过 xml 配置待执行的测试用例

通过 yml 指定待执行测试的设备及 Appium 端口

用例执行失败自动重试,且重试次数可配置

用例执行失败时自动截图

生成测试报告 (NGReport)

支持自定义配置项

Config.png

37d5a5c03ccc11ff952028c96c50ed8e.png

设计目标

用一套代码执行 Android/iOS 测试用例

Test case 层的代码高度利用,只需要考虑业务逻辑,无需关心系统平台及如何查找元素

以下代码在iOS和Android上均可运行

//打开我的朋友圈

public void showMyMoment(){

//打开微信主页面,点击"我"

WeiXinMainPage.verify()

.clickMeButton();

//校验"我"页面,打开"朋友圈"

WeiXinMePage.verify()

.clickMoment();

//校验"朋友圈页面",下划一段距离,然后打开带图片的朋友圈

WeiXinMomentPage.verify()

.scroll()

.clickMyMoment();

Driver.sleep(10);

}

设计理念

应用 Page Object 模式提高 UI 页面操作代码的复用度

用 Driver 类封装所有用到的 Appium API, 框架中其它类只通过 Driver 调用 Appium 的方法,这种作法会有以下两点好处:

一、屏蔽对 Appium API 的依赖,如果 Appium 的某个 API 官方废弃了,只需修改 Driver 类封装的相应方法即可

二、如果将 Appium 换成 Macaca 或其它框架,除了改动 Driver 类 其它类无需改动

在 Driver 中用 findElementById 等封装对 iOS 和 Android 的元素查找,提高代码的复用,尽可能的避免 iOS 与 Android 因查找元素方式不同而写相似的代码

该框架适用于同一个 APP, Android 和 iOS UI 结构基本一致的情况

一些原则

Page 类的构造函数用 Verify 代替

Page 类的构造函数用过 findElementByID 等来 检查当前页面是不否为期望的 Page

依照 SRP 原则,Page 类内的函数 只返回当前类实例(this) 或 void, 不返回其它页面的对象,确保每个 Page 与依赖于任何其它 Page,提高 Page 类的复用度

//朋友圈的Page类

public class WeiXinMomentPage extends BasePage {

//能过静态方法返回页面实例

public static WeiXinMomentPage verify(){

if( !Util.isAndroid() ) {

//默认情况下写的Page类是Android的UI

//若Android与iOS UI上有差异,需继承Android的Page类再写个iOS Page

return new WeiXinMomentPageiOS();

}

return new WeiXinMomentPage();

}

//不允许调用构造函数

protected WeiXinMomentPage(){

Driver.findElementByText(getRes("MOMENT_PAGE_ME_TEXT"));

}

//所有成员函数只返回this或void,确保每个Page类的独立性,不依赖于任何其它Page类

public WeiXinMomentPage scroll(){

Driver.scrollUp();

return this;

}

public WeiXinMomentPage clickMyMoment(){

MobileElement elem = Driver.findElemByIdWithoutException (getRes("MY_POST_PAGE_MOMENT_PIC_ID"));

if(elem == null){

elem = Driver.findElementById(getRes("MY_POST_PAGE_MOMENT_ARTICLE_ID"));

}

elem.click();

return this;

}

}

Driver : 封装所有用到的 Appium 方法。作用屏幕对 Appium 的依赖、提供更方便的函数。

BasePage : 所有 Page 类的基类

BaseTest : 所有 Test 类的基类

ConfigUtil : 读取工程配置文件

ResourceUtil : 读取资源配置文件

Util : 工具类,提供一些能用方法

PageUtil : 封装进入某个页面的方法,方便复杂 test case 的编写

TestListener : 监听测试结果,用例执行失败时截图

配置文件

Config.yml 运行测试时的一些配置项 如包名,重试次数等等。 详见 Config.ym 内的注释

资源文件(具体使用方法见 demo)

为每个元素新建一个便于辨识的名字,用这个名字统一 Android/iOS 待查找元素, 然后将不同系统找中该名字的元素对应的值写入相应的 RES.yml 中

AndroidRES.yml 写入 Android 元素查找时需要用到的值

IOSRES.yml 写入 iOS 元素查找时需要用到的值

AndroidRES.yml

MAIN_PAGE_WEIXIN_TEXT: '微信'

MAIN_PAGE_CONTACT_TEXT: '通讯录'

MAIN_PAGE_DISCOVER_TEXT: '发现'

MAIN_PAGE_ME_TEXT: '我'

ME_PAGE_MY_POST_TEXT: '相册'

MOMENT_PAGE_ME_TEXT: '我的相册'

MY_POST_PAGE_MOMENT_PIC_ID: 'com.tencent.mm:id/dep'

MY_POST_PAGE_MOMENT_ARTICLE_ID: 'com.tencent.mm:id/yk' IOSRES.yml

MAIN_PAGE_WEIXIN_TEXT: '微信'

MAIN_PAGE_CONTACT_TEXT: '通讯录'

MAIN_PAGE_DISCOVER_TEXT: '发现'

MAIN_PAGE_ME_TEXT: '我'

ME_PAGE_MY_POST_TEXT: '相册'

MOMENT_PAGE_ME_TEXT: '我'

MY_POST_PAGE_MOMENT_PIC_ID: 'visible == true AND type == "XCUIElementTypeStaticText" AND name CONTAINS "月"'

测试用例集

框架通过读取 task 目录下的 xml 运行指定的测试用例

在任务的xml中有四个值需要配置

1. port : Appium 端口

2. udid : 设备ID

3. wdaPort : iOS设备运行的时的WDA port

4. class : 待运行的测试类

测试执行时输入的xml样例

如何运行 demo

demo 实现的功能:打开微信 (若未登录微信,请先手动登录),然后打开朋友圈,查看第一个朋友圈 (带图片的)

启动 Appium,然后运行以下命令

方式一 : 将工程打成 Jar 包,然后运行命令 java -jar UIAutomation-1.0-fat-tests ./task/demo.xml

方式 2 : IDEA 中 右键单击 demo.xml ,选择运行。见下图

Run-By-IDEA.png

72ca39d65fbe265e31b48a3e2392fc9f.png

参考文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长虹android电视安装apk,长虹电视通过安卓手机安装沙发管家教程

‍本文教程适用于长虹电视LED39(48/50/55)C 2080i等相类似型号;【安装步骤简介】安卓手机安装沙发管家手机版--手机和智能电视/盒子用同一个路由器连接--沙发管家手机版推送安装【操作方法详情】1、使用您的安卓手机下载并安装沙发管家手机版:http://pub…

1使用技巧_新版PubMed使用技巧1

以下分享适合小白,高手请绕路。PubMed是许多医学生以及科研人员必备的检索系统,高效的利用PubMed可以节省很多时间。本文从以下几个方面简单讲解新版PubMed的使用技巧1:1、PubMed基本介绍;2、PubMed的高级检索。后期分享使用技巧2…

html复选框打钩行变颜色,Excel 单元格打勾会变颜色,开发工具的复选框这样玩...

Excel中的复选框除了打钩,打叉之外还有什么其他功能吗?其实,这里面的学问可多了,可造之物也非常之多。今天,我就利用复选框来教大家制作一个特别的表格,在复选框中打钩的后,单元格的颜色就会随着…

js怎么图表在html中显示不出来的,基于Echarts图表在div动态切换时不显示的解决方式...

简单粗暴,先上图,大概长这样:在使用vue时有遇到像上图下拉框change事件切换div,change切完后大概会变成这个样子:上代码:{{ option.text }}{{selected}}export default{name:"test",data(){retur…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为,UML中最重要的图之一。 而且序列图,对于业务建模,也有非常好…

如何创建计算机的桌面快捷方式,怎么设置桌面快捷方式,怎么创建快捷方式到桌面...

很多win7系统用户反映说遇到这样一个问题,就是电脑上从文件服务器创建的快捷方式就会自动被删除,自己重新创建之后,过几天重新启动win7系统的时候,那些快捷方式又会自动被删除不见了,怎么办呢,下面以win7 3…

福师计算机应用基础在线作业二及答,福师《计算机应用基础》在线作业二 下列软件中属于应用软件的是.docx...

福师《计算机应用基础》在线作业二 下列软件中属于应用软件的是.docx 计算机应用基础计算机应用基础1 1 单选题单选题1 下列软件中属于应用软件的是() D A 操作系统B 编译程序C 数据库管理系统D 财务管理系统2 以下域名中,表示商业网的是() C A eduB cnC comD org3 …

台式计算机没有usb3.0,新装的win7没有usb驱动完美解决方法(支持usb3.0/usb3.1)

最近有很多网友问,为什么我新装win7系统后usb驱动,相关的usb鼠标键盘都不能用了怎么办?大家都知道,win10系统虽然发布了几年,但是由于Win7的习惯留住了不少Win7忠实用户,因此Win7系统的使用用户还是比较多的…

typora用Pandoc导出html,Typora安装 Pandoc实现导出功能

Typora安装 Pandoc实现导出功能问题引入在使用Typora的时候,如果想要把写好的MarkDown文件导出到其他地方的话,是比较方便的。但是Typora本身只支持PDF和HTML两种方式的导出,如下图所示,如果想导出下面的方式他就会提示安装Pandoc…

联想笔记本关闭锁定计算机,联想笔记本Win10怎样显示/隐藏大小写锁定及数字锁定图标...

近来,很多联想Win10笔记本用户都在抱怨自己的电脑桌面总会显示大小写锁定和数字小键盘锁定图标,看着很不习惯。那么,我们要怎样设置图标隐藏呢?下面,小编就向大家分享联想笔记本Win10设置显示/隐藏大小写锁定及数字锁定…

mysql 主键长度_MySQL 数据库,主键为何不宜太长长长长长长长长?

回答星球水友提问:沈老师,我听网上说,MySQL数据表,在数据量比较大的情况下,主键不宜过长,是不是这样呢?这又是为什么呢?这个问题嘛,不能一概而论:(1)如果是In…

计算机有多少种开发语言,为什么现在会有这么多种编程语言?

21世纪,计算机的应用越来越多,为了适应各种使用场景,于是诞生了各种语言,不仅语言是多样的,每种语言下面都有不同的开发框架,框架也是多样的。有时候为了性能,可能会选择编译型语言,…

计算机保护地阻值,机房接地系统的一般接地电阻要小于多少欧姆?

机房接地系统宜采用综合接地方案,综合接地电阻应小于1欧姆。机房接地系统:(1)机房有四种接地方式:交流工作地、安全保护地、直流工作地和防雷保护地。(2)信号系统和电源系统、高压系统和低压系统不应使用共地回路。(3)灵敏电路的接地应各自隔…

计算机丢失wpcap.dll会影响什么,Win7系统提示wpcap.dll丢失如何解决?

最近有Win7系统用户反映,打开程序或者玩游戏的过程中都会出现wpcap.dll丢失的提示,这直接导致了程序无法正常打开以及游戏无法正常运行,用户为此非常苦恼。那么,Win7系统提示wpcap.dll丢失如何解决呢?下面,…

centos安装mysql5.7.12_CentOS二进制安装MySQL5.7.12

1、检查服务器上是否有其他版本的mysql数据库,可能会影响现有安装的数据库,卸载之yum -y remove mysql-libs-5.1.73* (rpm -e mysql..... --nodeps)2、安装mysqltar -zxvf mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz -C /usr/local/(解压安装包文件)mv …

linux 启动一个网站_在线试用 200 多种 Linux 和 Unix 操作系统

只要打开该网站,选择你需要的 Linux/Unix 发行版,然后开始试用!-- Sk(作者)不久前我们介绍过 OSBoxes ,该网站提供了一系列免费且开箱即用的 Linux 和 Unix 虚拟机。你可以在你的 Linux 系统中下载这些虚拟机并用 VirtualBox 或 V…

搭建微信令牌中控服务器,使用ThinkJs搭建微信中控服务的实现方法

本人前端渣渣一枚,这篇文章是第一次写,如果有硬核bug,请大佬们轻喷、指出... 另外,本文不涉及任何接口安全、参数校验之类的东西,默认对调用方无脑级的信任:joy: 目前自用的接口包括但不限于以下这些|--- 微信相关| |-…

华为服务器sn号查询网站,linux 查询服务器sn

linux 查询服务器sn 内容精选换一换Linux云服务器变更规格时,可能会发生磁盘挂载失败的情况,因此,变更规格后,需检查磁盘挂载状态是否正常。本节操作介绍变更规格后检查磁盘挂载状态的操作步骤。以root用户登录云服务器。执行以下…

jdba访问mysql_mysql连接出现问题记录

解决:Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone valu//报错信息Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ‘‘ is unrecognized or represents…

python制作表白神器_python制作exe可执行表白神器-Go语言中文社区

1、效果图2、程序源码import turtleimport time#writing txtturtle.hideturtle()turtle.penup()turtle.goto(130,50)# turtle.pendown()turtle.color("blue")turtle.write("亲爱的,给你画个东西",font ("Times",18,"bold"…