Airtest简单上⼿讲解
Airtest是⽹易开发的⼿机UI界⾯⾃动化测试⼯具,它原本的⽬的是通过所见即所得,截图点击等等功能,简化⼿机App图形界⾯测试代码编写⼯作。
安装和使⽤
Airtest运⾏以后的界⾯如下图所⽰。
连接⼿机
以Android⼿机为例,由于Airtest会通过adb命令安装两个辅助App到⼿机上,再⽤adb命令通过控制这两个辅助App进⽽控制⼿机,因此⾸先需要确保⼿机的adb调试功能是打开的,并允许通过adb命令安装App到⼿机上。
启动Airtest以后,把Android⼿机连接到电脑上,点击下图⽅框中的refresh ADB:
此时在Airtest界⾯右上⾓应该能够看到⼿机的信息,如下图所⽰。(本⼈以mumu模拟器为例)
原生安卓app开发点击connect按钮,此时可以在界⾯上看到⼿机的界⾯,并且当你⼿动操作⼿机屏幕时,Airtest中的⼿机画⾯实时更新。如下图所⽰。
对于某些⼿机,例如⼩⽶,在第⼀次使⽤Airtest时,请注意⼿机上将会弹出提⽰,询问你是否允许安装App,此时需要点击允许按钮。
打开雪球股票app
先通过⼀个简单的例⼦,来看看如何快速上⼿Airtest,稍后再来详解。
例如我现在想使⽤电脑控制⼿机,打开雪球股票app。
此时,点击下图中⽅框框中的touch按钮:
此时,把⿏标移动到Airtest右边的⼿机屏幕区域,⿏标会变成⼗字型。在雪球股票app图标的左上⾓按下⿏标左键不放,并拖到雪球股票app 右下⾓松开⿏标。此时请注意中间代码区域发⽣了什么变化,如下图所⽰。
好了。以上就是你需要使⽤电脑打开雪球股票app所要进⾏的全部操作。
点击上⽅⼯具栏中的三⾓形图标,运⾏代码,如下图所⽰。
代码运⾏完成以后,雪球股票app被打开了。
界⾯介绍
在有了⼀个直观的使⽤以后,我们再来介绍⼀下Airtest的界⾯,将会更加有针对性。
Airtest的界⾯如下图所⽰。
这⾥,我把Airtest分成了A-F6个区域,他们的功能如下:
A区:常⽤操作功能区
B区:Python代码编写区
C区:运⾏⽇志区
D区:⼿机屏幕区
E区:App页⾯布局信息查看区
F区:⼯具栏
A区是常⽤的基于图像识别的屏幕操作功能,例如:
touch: 点击屏幕元素
swipe: 滑动屏幕
exists: 判断屏幕元素是否存在
text: 在输⼊框中输⼊⽂字
snashot: 截图
……
⼀般来说,是点击A区⾥⾯的某⼀个功能,然后在D区屏幕上进⾏框选操作,B区就会⾃动⽣成相应的操作代码。
B区⽤来显⽰和编写Python代码。在多数情况下,不需要⼿动写代码,因为代码会根据你在⼿机屏幕上⾯的操作⾃动⽣成。只有⼀些需要特别定制化的动作才需要修改代码。
D区显⽰了⼿机屏幕,当你操作⼿机真机时,这个屏幕会实时刷新。你也可以直接在D区屏幕上使⽤⿏标操作⼿机,你的操作动作会被⾃动在真机上执⾏。
F区是⼀些常⽤⼯具,从左到右,依次为:
1. 新建项⽬
2. 打开项⽬
3. 保存项⽬
4. 运⾏代码
5. 停⽌代码
6. 查看运⾏报告
其中1-5很好理解,那么什么是查看运⾏报告呢?
当你⾄少运⾏了⼀次以后,点击这个功能,会⾃动给你打开⼀个⽹页。⽹页如下图所⽰,这是你的代码的运⾏报告,详细到每⼀步操作了什么元素。
通过截图功能操作⼿机虽然⽅便,但是截图涉及到分辨率的问题,代码不能在不同的⼿机上通⽤。所以对于A区的功能,做点简单操作即可,不⽤深⼊了解。
更⾼级的功能,需要通过E区实现。
基于App布局信息操作⼿机
初始化代码
App的布局信息就像⽹页的HTML⼀样,保存了App上⾯各个元素的相对位置和各个参数。对于⼀个App⽽⾔,在不同分辨率的⼿机上,可能相同的元素有着不同的坐标点,但是这个元素的属性参数⼀般是不会变的。因此,如果使⽤元素的属性参数来寻并控制这个元素,就能实现在不同分辨率⼿机上的精确定位。
App的布局信息的格式与App的开发环境有关。点击F区的下拉菜单,可以看到这⾥能够指定不同的App开发环境。其中的Unity、Cocos-*等等⼀般是做游戏⽤的,Android是安卓原⽣App,iOS是苹果的App……如下图所⽰。
同样以雪球股票APP为例,由于它是Android原⽣的App,所以在F区下拉菜单选择Android,此时注意B区弹出提⽰,询问你是否要插⼊poco初始代码到当前输⼊光标的位置,点击Yes,如下图所⽰。
此时,B区⾃动插⼊了⼀段代码,如下图所⽰。
定位并点击
现在,点击E区的锁形图标,如下图所⽰。
锁形图标激活以后,你再操作D区的屏幕,点击雪球股票App下⾯的雪球股票四个字,会发现屏幕上被点击的App并不会打开。但E区和C区却发⽣了变化,如下图所⽰。
其中E区显⽰的树状结构就是当前屏幕的布局信息,这与Chrome开发者⼯具⾥⾯显⽰的HTML结构如出⼀辙。C区显⽰的是当前被我点中的元素的信息。
请注意在这些元素信息中,有⼀个text属性,它的值为雪球股票。那么,这个属性就可以作为⼀个定位元素,于是可以在B区编写代码:poco(text="雪球股票").click()
写完代码以后运⾏程序,可以看到雪球股票App被打开了。如下图所⽰。
注意,如果你发现⼿机真机显⽰的界⾯与Airtest屏幕显⽰的⼿机界⾯不⼀致,可能是因为Airtest的屏幕被你锁定了。在F区点⼀下锁形图标,取消锁定,Airtest中的⼿机屏幕就会更新了。
定位并输⼊
打开知乎以后,我想使⽤雪球股票的搜索功能,那么继续,把锁形图标激活,然后点击雪球股票顶部的搜索框,如下图所⽰:
继续看C区显⽰的搜索框属性,可以看到这⾥有⼀个name属性,它的值是com.xueqiu.android:id/tv_banner。所以此时需要使⽤name这个属性。常见的基本上不会变化的属性包含但不限于:name type resourceId package。
另外还有⼀点,知乎⾸页的这个搜索框,实际上是不能输⼊内容的,当你点击以后,会跳转到另⼀个页⾯,如下图所⽰。
因此你需要先点击⼀下这个输⼊框,跳转到真正的搜索界⾯:
poco(name="com.xueqiu.android:id/tv_banner").click()
在真正的搜索界⾯如下图所⽰。
可以看到,name属性的值依然是com.xueqiu.android:id/search_input_text,,还有⼀个text属性,它的值为招商银⾏去年净利同⽐增四个点。能不能像前⾯打开雪球⼀样,使⽤text这个属性呢?也⾏,也不⾏。说它⾏,是因为你这么做确实现在能⼯作;说它不⾏,因为这是雪球的热门搜索关键词,随时会改变。你今天使⽤这⼀句话成功了,明天热门关键词变化了,那么你的代码就⽆法使⽤了,所以此时需要使⽤name这个属性。
输⼊内容使⽤的⽅法为set_text,⽤法为:
poco(name="com.xueqiu.android:id/search_input_text").set_text('alibaba')
定位并筛选
输⼊了搜索关键词以后,再来看看当前页⾯,搜索出现了6个结果:
通过对⽐这⼏个结果的属性信息,发现他们的name属性都是相同的,⽽text不同。如果像下⾯这样写点击动作:
poco(name="com.xueqiu.android:id/name").click()
那么默认就会点击第⼀个搜索结果。
如果我想点击第⼆个搜索结果怎么办呢?可以这样写代码:
poco(name='com.xueqiu.android:id/name', text='阿⾥巴巴-SW ').click()
或者你也可以像列表⼀样使⽤索引定位:
poco(name='com.xueqiu.android:id/name')[1].click()
这两种写法的前提,都是我们已经知道了每个结果分别是什么。假设现在我就想搜索阿⾥巴巴,但我不知道搜索结果是第⼏项,⼜应该怎么办呢?此时还可以使⽤正则表达式:
poco(name='com.xueqiu.android:id/name', textMatches='^阿⾥巴巴*$').click()
滑动屏幕
进⼊搜索结果以后,需要查看下⾯的各种即如果,此时就需要不断向上滑动屏幕。这⾥有⼀点需要特别注意,Airtest只能获取当前屏幕上的元素布局信息,不在屏幕上的内容是⽆法获取的。
滑动屏幕使⽤的命令为swipe,滑动屏幕需要使⽤坐标信息。但这种坐标和屏幕分辨率⽆关。这⾥的坐标定义为:(x, y),其中x为横坐标,y 为纵坐标。屏幕左上⾓为(0, 0),屏幕右下⾓为(1, 1),从左向右,横坐标从0逐渐增⼤到1,从上到下,纵坐标从0逐渐增⼤到1。
现在我要把屏幕向上滑动,那么在真机上⾯,我是先按住屏幕下⽅,然后把屏幕向上滑动,所以代码可以这样写:
# poco.swipe(起点坐标,终点左边)
poco.swipe([0.5, 0.8], [0.5, 0.2])
在⼀般情况下:
向上滑动,只需要改动纵坐标,且起点值⼤于终点值
向下滑动,只需要改动纵坐标,且起点值⼩于终点值
向左滑动,只需要改动横坐标,且起点值⼤于终点值
向右滑动,只需要改动横坐标,且起点值⼩于终点值
单独使⽤Python控制⼿机
在Airtest操作⼿机虽然⽅便,但是不可能在每⼀台电脑上都安装Airtest吧。所以需要想办法把代码从Airtest这个程序中分离出来。
Airtest基于Python的⼀个开源库Poco开发,⽽在Airtest的B区写的Python代码,实际上就是Poco的代码。所以只要安装Poco库,就可以在Python中直接控制⼿机。
安装Poco库的命令为:
pip install pocoui
这个库依赖的东西有点多,安装稍稍慢⼀些。安装完成以后,我们把代码复制到PyCharm中,如下图所⽰。
运⾏这段代码,如果是Linux或者macOS的⽤户,请注意看运⾏结果是不是有报错,提⽰adb没有运⾏权限。这是因为随Poco安装的adb没有运⾏权限,需要给它添加权限,在终端执⾏命令:
# chmod +x 报错信息中给出的adb地址
chmod +x /usr/local/lib/python3.9/site-packages/airtest/core/android/static/adb/mac/adb (实际执⾏时请换成你的地址)
命令运⾏完成以后再次执⾏代码,可以看到代码运⾏成功,⼿机被成功控制了,如下图所⽰。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论