(四) appium-desktop 脚本录制常用AW使用介绍
通过使用appium-desktop录制脚本,编写app自动化脚本的过程中,会使用到一些AW,下面就这些AW的使用方法做详细的介绍。通过实践可以看到这几个AW可以完成测试工作。
AWOpenGivePage
1、功能描述
路由打开给定的页面
2、字段描述
字段名称 |
是否必须 |
字段类型 |
描述 |
pageRouter |
是 |
String |
需要打开页面的pg或者js地址。框架中目前配置了一些页面的PG,录脚本时会自动填充,如果没有配置过,脚本录制后需要手动修改下脚本。或者联系我在框架中添加(需要提供页面的activity和PG) |
3、举例
{ |
AWAppiumDriver
1、功能描述
driver的初始化、关闭
2、字段描述
字段名称 |
是否必须 |
字段类型 |
描述 |
action |
是 |
String |
动作 open:初始化driver close:关闭driver |
url |
是 |
String |
请求appium-server地址;默认:http://127.0.0.1:4723/wd/hub |
allRecord |
否 | Boolean | 是否都是录制脚本,默认false;true时不再加载数据库中保存的控件元素(非录制脚本,控件元素是通过接口落地到数据库中,执行脚本时需要从数据库中读取出来) |
appActivity |
否 | String | 要启动app的首页activity,默认管家 |
appPackage |
否 | String | 要启动app的包名,默认管家 |
3、举例
{ |
AWAppiumRecordAction
1、功能描述
提供多种查找元素的方式,以及页面操作执行。该AW内容一般都是录制出来的,特殊点见字段描述
2、字段描述
字段名称 |
是否必须 |
字段类型 |
描述 |
elementInfoList
|
是 |
List<List<String>> |
具体操作步骤:["美团外卖店主","click", "accessibility id","美团外卖店主"] 1、支持的操作click、sendKeys、tap、swipe、tapSendKey。 2、支持在上面的click/sendKeys操作前面加check,默认false。比如:checkclick:true、checkclick、checksendKeys:false。作用是在操作之前检查元素是否存在,true标示一次执行期间每次都检查,否则只检查一次。 3、1中支持的所有操作,除了tapSendKey,其它都是通过录制脚本录制。tapSendKey使用于有些页面输入框元素定位不到,只能通过定位坐标的方式进行输入。录制时可以先录制为tap操作,录制成功后(["坐标点击","tap", "","0.4361111111111111","0.2875"]),手动修改脚本,tap修改为tapSendKey,数组后面添加需要输入的内容(["坐标点击","tapSendKey", "","0.4361111111111111","0.2875","15267081011"]) 4、每种操作的操作步骤都可以在数组的最后面添加等待时间,默认10秒钟。比如:["美团外卖店主","click", "accessibility id","美团外卖店主","15"] 5、元素定位方式,脚本录制中主要使用id、accessibility id、xpath、h5classname,其中xpath有时候录制出来的是全路径,为了提高执行效率可以手动修改为相对路径;当录制页面是webView页面时,定位输入框使用h5classname方式,目的是兼容不同型号、不同系统的手机对该页面解析可能不一致的问题。除了上面提到的三种方式,常用还有classnames方式 6、classnames使用方式,场景:需要定位的元素存在多个,除了xpath以外,其它一样。录制完成后(["点击相册","click", "xpath","//android.widget.TextView[@text='相册']"])修改xpath修改为classnames,后面路径修改为classname:instance格式(android.widget.TextView:11) |
checkElementInfo
|
否 |
List<List<String>> |
具体操作步骤:["是否有更新提示","click","xpath","//android.widget.TextView[@text='检查到测试包有更新,是否安装?']","5"], 1、检查该字段第一个元素是否存在,存在就执行该字段所有的操作步骤,否则不执行,继续执行elementInfoList中的操作步骤 2、功能与上个字段的check功能类似,两个可以相互切换。不同点是有多个步骤需要检查时使用check可以一个AW完成,使用checkElementInfo需要多个AW分开写。 |
3、举例
纯粹演示AW使用方法,内容步骤无意义
{ |
AWRecordAssert
1、功能描述
结果校验,支持校验元素是否存在、元素各个属性的值以及控件颜色等
2、字段描述
字段名称 |
是否必须 |
字段类型 |
描述 |
checkElementInfo |
是 |
List<List<String>> |
需要检验的各元素["手动输入花呗账单","accessibility id", "3","手动输入花呗账单"] 1、元素定位方式除了AWAppiumRecordAction提到,还支持toast、toastLike方式。 2、每个校验项数组后面支持增加等待时间,默认10秒。 3、数组中第三个元素标示校验项,3标示检验元素存在。还支持元素其它属性值校验,替换掉3即可,比如:text、checkable、clickable等。需要注意除了3以外,填写其它校验项时需要在数组后面添加一个期望的值 4、支持颜色校验["手动输入花呗账单","accessibility id", "color","手动输入花呗账单","#FFFFF"],由于期望的颜色是十六进制颜色码,所以使用时,期望值可以先随便填写一个,运行脚本后查看日志打印的实际的十六进制颜色码是多少。再修改脚本。 |
checkExit |
否 |
Boolean |
检验元素是否存在,默认true,检验元素存在,否则检验元素不存在 |
3、举例
{ |
AWKeyBoardAction
1、功能描述
纯粹键盘操作,不依赖元素。
2、字段描述
字段名称 |
是否必须 |
字段类型 |
描述 |
actionName |
否 |
String |
操作名称 默认back,返回到上一级。 hideKeyboard 隐藏键盘 switchToNative 切换到native |
3、举例
{ |
AWSleep
1、功能描述
线程等待时间
2、字段描述
3、举例
{ |
AWHttpClient
1 功能描述
发送HTTP请求到服务端,并按照一定规则校验服务端返回的响应消息。
2 字段描述
字段名称 | 是否必须 | 字段类型 | 描述 |
---|---|---|---|
request |
是 |
HttpClientRequest |
Http request相关信息,具体请参见下表2.1 |
reponseExpected |
是 |
HttpClientResponse |
Http reponseExpected 相关信息,具体请参见下表2.2 |
config |
否 |
MapComparedConfig |
MapComparedConfig相关信息,具体请参见1.1.1 |
retryTime | 否 | int | 请求重试次数(不包含原请求),默认为0,如值为3,则表示最多请求4次 |
retrySecond | 否 | int | 重试的间隔时间,单位为秒,默认立即重试 |
retryStateCodeList | 否 | List<Integer> | 匹配的响应状态码集合,如[500, 501]表示如果响应状态码为500或501时则进行重试,不设置时根据reponseExpected的stateCode与实际响应状态码比对,不一致则进行重试 |
重试策略说明:
1.若响应返回为null则直接进行重试
2.如果未设置retryStateCodeList或retryStateCodeList为空集合,则判断reponseExpected.getStateCode()是否与实际的状态码是否一致,不一致则进行请求重试
3.如果retryStateCodeList不为空集合,则判断retryStateCodeList集合是否包含实际状态码,若包含则进行重试
2.1 HttpClientRequest
字段名称 | 是否必须 | 字段类型 | 描述 |
---|---|---|---|
type |
是 |
String |
请求类型,1:GET 2:POST 3:PUT 4:DELETE 5:PATCH |
url | 是 | String |
request链接地址,如:"url":"http://xxxxx/xxxx/api/v1/xxxx" 或者"url":"${global.data.gjj.addr}${global.gjj.url.newaccounts}", |
query | 否 |
Map<String, String> |
query map,URL问号后面的键值对 |
path | 否 |
Map<String, String> |
path map,URL中path部分的键值对 |
headers | 否 |
Map<String, String> |
请求头 |
requestBody |
否 |
Object |
post/put请求的body,可以直接复制 swagger的请求 |
2.2 HttpClientResponse
字段名称 | 是否必须 | 字段类型 | 描述 |
---|---|---|---|
stateCode |
是 | String | 响应的状态码,如 "stateCode":"200" |
responseBody |
否 | Object | 响应的body,可以直接复制swagger返回的消息 |
headers |
否 |
Map<String, String> |
响应头 |
3 举例
{ |
AWTemplateActuator
1、AW变为模版
正常编写完AW,在测试用例中作为一个步骤,格式如下:
举例:
{ |
1.1、增加下面两个参数
"awIsTemplate":true,
"templateName":"youname"
1.2、参数化
把变量参数化,比如上面的例子中,需要把mobile和password的值参数化
上面测试步骤变成的模版如下:
{ |
原有AW只要是继承了ActionWord类都支持该功能。
2、模版引用
使用框架中的 AWTemplateActuator引用模版。该AW唯一参数citationTemplates是一个对象的list。对象属性包括
templateName–引用的模版名称
templateParamValue–模版中参数值
assertTemplateName–校验结果的模版名称
举例:
比如引用上面的模版的使用方法如下:
{ |
当然如果你参数值是固定的,可以不用参数,模版引用中只需要不传递templateParamValue参数即可。
2.1、扩展
对于输入我们一般会做很多非法性校验,使用模版执行器只需要配置参数值即可,比如上面的例子:
{ |
3、模版路径
3.1、模版和非模版混合使用
一个用例文件中可以包含AW模版和非AW模版两种类型,但是对于模版记得使用AWTemplateActuator执行模版
3.2、模版路径方法
为了模版的重复使用,可以把模版放到一个文件夹里面,用例文件只负责使用AWTemplateActuator调用模版
3.2.1、新建模版文件夹
新建文件夹,把所有模版都放到该文件夹里面
3.2.2、增加配置
application.propertites中增加template.path:./xx/xx/xxx/xxx。
其它不变。
(四) appium-desktop 脚本录制常用AW使用介绍的更多相关文章
- 6、通过Appium Desktop 实现录制功能
1.老规矩,我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮, 这是一种通过坐标定位元素的方式. 图中红色标记2为 “Start Recording” 按钮, ...
- LR脚本中常用函数使用介绍
1.变量和参数的设置 //将IP地址和端口放入到参数中lr_save_string("192.168.1.133:8081","ip"); //计算变量数组的元 ...
- Appium Desktop 元素定位和脚本录制功能
Appium Desktop除了可以做Server之外还可以进行元素定位和脚本录制功能,点击放大镜按钮,进入页面设置.开始配置Desired Capabilities. 配置Desired Capab ...
- LoarRunner脚本录制-Port Mapping
使用LR录制脚本时经常会因为内外网访问限制,或浏览器兼容等问题,导致无法正常录制脚本. 这里简单介绍一下使用LR端口映射的方式进行脚本录制,与之前介绍的<Jmeter脚本录制--HTTP代理服务 ...
- loadrunner11的移动端性能测试之脚本录制
以前使用LR11录制过一个app的登录操作,这里记录一下 测试准备 硬件要求 1, 负载测试机一台(内存8G以上,cpu 1.5GHZ以上,存储空间20G以上)或两台以上(控制机和多个负载机). 2 ...
- Jmeter脚本录制方法(一)——分别使用Badboy录制和Jmeter自带的代理服务器录制
Jmeter录制方式分三种,分别是:使用Badboy录制.Jmeter自带的代理服务器录制和手工录制,今天先介绍前两种录制方法. Badboy录制 Badboy是用C++开发的动态应用测试工具, 其拥 ...
- Jmeter脚本录制方法(二)——手工编写脚本(jmeter与fiddler结合使用)
jmeter脚本录制方法可以分三种,前几天写的一篇文章中,已介绍了前两种,今天来说下第三种,手工编写脚本,建议使用这一种方法,虽然写的过程有点繁琐,但调试脚本比前两者方式都要便捷. 首先来看下三种方式 ...
- jmeter脚本录制与性能指标分析
一.浏览器代理设置(猎豹) 1.打开猎豹浏览器,进行如下图操作 2.点击局域网设置 3.输入如下信息,注意端口不要重复 4.输入网址www.baidu.com,不能正常访问就是正确的 5.查看添加的端 ...
- Jmeter4.X - 使用本身自带的脚本录制功能录制脚本
1.前言 记录对Jmeter评估研究的过程,本文记录使用apache网站提供的原Jmeter使用自带功能进行脚本录制. 本文可用于面向B/S WEB应用测试的工程师熟悉Jmeter使用.章节安排按照脚 ...
随机推荐
- Django学习系列2:django环境中安装selenium并查看selenium版本号
在Django环境中安装selenium (django) root@ranxf-TEST:/studydisk/Python_web_TDD/superlists# conda install se ...
- netlink对中断的支持
http://blog.chinaunix.net/uid-24227137-id-3025783.html https://blog.csdn.net/tycoon1988/article/deta ...
- linux下的命令和常见问题笔记
nginx的三大功能: 1.http服务 2.反向代理 3.负载均衡 2.当nginx重启报:[root@localhost logs]# service nginx reloadReloading ...
- python---剪贴板
import sys from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QTextBrowser, QPushButton, ...
- percona 5.7 + tokudb
percona 5.7 + tokudb Percona + TokuDB 部署 # 参考资料https://www.kancloud.cn/devops-centos/centos-linux-de ...
- Python 3标准库第一天讲解总结
一.很多知识自己没有理解透: 二.课件准备不足: 三.第一次讲解有点紧张: 四.口才也不是很好,很多有断片的情况: 五.SB式的坚持:
- 解决SonarQube启动时直接挂掉问题
症状:启动SonarQube时,系统启动,但是马上关闭 查看日志,提示ElasticSearch启动有问题ClusterBlockException[blocked by: [FORBIDDEN/12 ...
- 【leetcode】Path Sum IV
If the depth of a tree is smaller than 5, then this tree can be represented by a list of three-digit ...
- Java 数组复制之clone方法
一.源码 public class Test1 { public static void main(String[] args) { // Student[] arrs = new Student[] ...
- CSP-S2019游记&拆塔记
不是拆广州塔 Day -inf 四套NOI模拟降智 Day0 拆了一发新新 本来想复习小圆脸结果拆了3h最后还没带任意门 没有帘子可还行 第一天由于没发现被子可以抽出来就没睡好 Day1 8:30开考 ...