UI自动化相关工具

1、appium平台

2、Apple的UIAutomation

3、Google的UIAutomation

简单的介绍一下这几个工具:

1、Appium简介

Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。

Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

Appium支持的语言比较多,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言等。

2、Apple的UIAutomation

Apple家的UIAutomation是 Xcode自带的测试框架,在Instruments中可运行,可直接录制脚本和直接运行。

只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。

3、Google的UIAutomation

Google的UIAutomation是谷歌自带的UI自动化测试工具。

只使用Google的UIAutomation,我们就只能用java来编写测试用例。

Appium介绍

Appium 的核心是一个 web 服务器,它提供了一套 REST 的接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP响应中返还给客户端。

环境搭建

我用了比较简单的脚本Python去完成appium脚本编写,下面就讲一下用Python完成UI自动化,环境搭建如下:

1、安装Appium

2、安装Appium python客户端

其他环境要求

1. IOS

Mac OS X 10.7 or higher, 建议10.9.2

XCode >= 4.6.3, 建议5.1.1

Apple Developer Tools

2. Android

Android SDK API >= 17 (建议18/19)

如何调用Python代码

1、开启appium

打开appium对应的安装路径,比如:C:\Program Files (x86)\Appium\node_modules\.bin

在该路径下,运行:appium 即可启动,appium默认是自动安装APK的

如果需要不安装的话,加个参数即可,启动命令如下:appium --no-reset

2、调用Python脚本

先将路径定位到写好的Python脚本main.py的路径

然后运行命令:

python -m unittest  main

Python脚本简介

Desired Capabilities

Desired capabilities 是一些键值对的集合 (比如,一个 map 或者 hash),客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把platformName capability 设置为 iOS,告诉 Appium 服务端,我们想要一个iOS 的 session,而不是一个 Android 的。

desired_capabilities.py

编写Python脚本时,需创建2个文件:desired_capabilities.py和main.py

desired_capabilities.py主要是建立get_desired_capabilities()

一、get_desired_capabilities()

获取本次会话的参数。这里主要设置了8个参数。用户可以根据自己的需求进行调整。

1. platformName,我们测试的目标机器。

2. platformVersion,测试目标设备的系统版本。

3. deviceName,测试机器的名称(设备名称即可)。

4. appPackage,被测应用的包名(只有Android测试才用)。

5. appWaitPackage,测试时会等待(只有Android测试才用)。

6. app,被测应用文件的所在位置

7. newCommandTimeout,两条指令的最长时间间隔。如果超过这个间隔,Appium Server将会终止本次会话。

8. automationName,本次会话所使用的自动化引擎。Android 4.2以下系统请使用Selendroid;IOS、Android 4.2以上(含)请使用Appium。

二、main.py

就是UI的功能性脚本。

常用方法整理

1、  查找控件方法

1)     ID : 通过resource-id查找。注意,测试Android应用时,Appium引擎和Selendroid引擎的id写法不同,Appium下类似这样:com.alibaba.mts.mtsdemoapp:id/login_login_button;而Selendroid下id是:login_login_button。所以,如果要写通用的脚本,建议使用其他查找方式。

2)     XPATH : 通过xpath寻找。例如查找一个包含“Add note”字符串的TextView控件:driver.findElement(By.XPATH, "//android.widget.TextView[contains(@text,'Add note')]")。

3)      LINK_TEXT : (不支持Android 4.2.1以下)通过控件的文本文字查找,比如:driver.findElement(By.LINK_TEXT, “登录”),找到控件文字为“登录”控件。注意,它不会匹配“登录吧”、“快登录”等文字。建议使用下面的“PARTIAL_LINK_TEXT”。

4)      PARTIAL_LINK_TEXT : (不支持Android 4.2.1以下)类似LINK_TEXT,但是可以匹配“登录吧”、“快登录”等文本的控件。只要包含“登录”即可。

5)      TAG_NAME : 通过控件类名查找,比如EditText、Button等等。

6)      CLASS_NAME : 通过控件全类名查找,比如android.widget.EditText 、android.widget.Button等

这些控件的属性都可以用uiautomatorviewer这个工具查看,如下图所示:

2、  常用操作

1)     滑动屏幕,比如引导页的滑动

driver.swipe(startx,starty,endx,endy,duration)

开始坐标和结束坐标,duration表示滑动时间,时间越长滑动越慢左右滑动的话,Y坐标不变

2)     点击按钮

Driver.click()

3)     等待

Time.sleep(N)

N是等待的时间,以秒为单位

4)     锁定屏幕

driver.lock(5)

5)     将APP置于后台

driver.background_app(5)

6)     收起键盘

driver.hide_keyboard()

7)     打开通知栏

driver.open_notifications()

8)     检查是否已安装

driver.is_app_installed('com.example.android.apis')

9)     安装应用到设备中

driver.install_app('path/to/my.apk')

10)   从设备中删除应用

driver.remove_app('com.example.android.apis')

11)   模拟设备摇晃

driver.shake()

12)   关闭应用

driver.close_app()

13)   按键事件 (Key Event)

给设备发送一个按键事件

driver.keyevent(176)

14)通过MQC截图检查

可直接在代码中输入MQC自带的截图检查指令。

self.driver.shell("log -p i -t MQC-LOG-MASTER screenshot")

appium入门知识的更多相关文章

  1. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  2. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  3. H5移动端开发入门知识以及CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  4. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  5. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  6. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

  7. React的入门知识与概念【1】

    回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...

  8. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

  9. 浅谈TCP IP协议栈(一)入门知识【转】

    说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...

随机推荐

  1. Oracle PL/SQL Developer 上传下载Excel

    接到需求,Oracle数据库对Excel数据进行上传和下载,百度后没有很全的方案,整理搜到的资料,以备不时之需. 一.下载Oracle数据到Excel中. 下载数据到Excel在MSSql中很简单,直 ...

  2. Rabbit的直连交换机direct

    直连交换机类型为:direct.加入了路由键routingKey的概念. 就是说 生产者投递消息给指定交换机的指定路由键. 只有绑定了此交换机指定路由键的消息队列才可以收到消息. 生产者: packa ...

  3. 《MySQL 基础课程》笔记整理(基础篇)

    一.尝试MySQL 1.打开MySQL # 启动MySQL服务 sudo service mysql start # 使用 root 用户登录,这里密码为空,直接回车登录 mysql -u root ...

  4. 关于利用MQ实现分布式事务的想法【转】

    转自:https://www.jianshu.com/p/bafb09954f18 假设:消息服务不丢消息 场景 服务A 服务B 服务C 消息服务Q 伪代码 服务A中 transaction{ A本地 ...

  5. django基础一:web、wsgi、mvc、mtv

    一.web框架 web框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以快速开发特定的系统.他山之石,可以攻玉.python的所有web框架,都是对so ...

  6. javaweb之EL自定义函数

    1.什么是EL自定义函数 EL自定义函数是在EL表达式中调用的某个java类的静态方法,这个静态方法需在web应用程序中进行配置才可以被EL表达式调用.EL自定义函数可以扩展EL表达式的功能,让EL表 ...

  7. spring 代理

    java动态代理实现 1. Java自带的动态代理,反射生成字节码 2. Cglib调用asm生成子类 spring 中代理实现 1. 如果类实现了接口,使用java动态代理 2. 没有实现接口,使用 ...

  8. JBPM学习第6篇:通过Git导入项目

    1.登记到工作台 切换到目录: $SERVER_HOME/bin/ for Unix environment: ./standalone.shfor Windows environment: ./st ...

  9. python垃圾回收机制(Garbage collection)

    由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...

  10. cf1037E. Trips(图论 set)

    题意 题目链接 Sol 倒着考虑!倒着考虑!倒着考虑! 显然,一个能成为答案的子图一定满足,其中任意节点的度数\(>= k\) 那么倒着维护就只用考虑删除操作,如果一个点不合法的话就把它删掉,然 ...