appium章节写的没有selenium的多,因为这两者在一定程度上还是有相类似的地方的,如:元素定位,虽然元素定位不是完全相同但是相似度还是挺高的,截图操作,键盘鼠标操作等,不同之处那就很明显了,如:定位所需要的工具、使佣到的库、作用对象等都不同。粗APP分了三种类型,且类型中有嵌套了不同的界面,定位不同的界面的时候,又需要通过切换来进行元素定位。
在学习appium之前,你是否找到ADB命令,你是否知道Monkey命令,你又是否用过xshell,他们有什么关联又能干什么。
简单的说明一下,Monkey命令配合ADB可以简单的跑一下APP,也就是简单的自动化。后面我们学到的工具及定位元素、使用方法,跟这些息息相关。废话不多说,相关的链接给到你们。
ADB命令学习
Monkey命令学习
上面两篇呢用于初步的学习,学习完上面两篇,就可以慢慢的深入学习了。注:appium啥也不多就是测试工具多!慢慢看,慢慢学,除了这些还有呢!
基本测试工具
APP元素定位+测试工具介绍
万字详解基本操作
uc-devtools与Airtest工具使用
目录
环境搭建篇
python坑
安卓环境坑
Java环境坑
工具使用篇
uiautomatorviewer
inspector
uc-devtools
Airtest
uiautomator2
weditor
定位方法篇
uiautomatorviewer
inspector
uc-devtools
Airtest
uiautomator2
assert
结语
首先我们来看看环境搭建篇,在进入学习之前,环境搭建我们必不可少,但是最容易出问题的地方也还是环境搭建,很多人初次学习python的朋友,python环境就没搭建对。除了python环境,还需要Android SDK、JDK,初次跑自动化这是必备的。既然是必备的,很多朋友就被卡在这了。
首先打开右击我的电脑选择属性:
再点击高级系统设置,选择环境变量:
你以为我是在教你配环境?错,是告诉你别踩坑
这里有两个path,你是否配在的上面的path。这里其实问题不大,问题大呢是在cmd命令中,你会发现为什么网上那么多人说python main.py等操作,前面必须要加上python,否则执行不了,就是这个原因。你把环境写在了上面的path。
当你发现你的pip命令用不了,不管用了,那你就更加要找这个原因了,这错误不知道坑了多少小白白。别问博主为啥知道,因为我也踩过。教训啊!!!
你是否在网上看到很多篇关于Android SDK的环境,都说要装eclipse、Android studio等,然后配置一大堆的东西,下载一大堆的环境,最后你还发现报错了,不对,下载不了,又疯狂的找原因。
其次就是环境,path变量中,很多朋友都配不对,不是少“ ; ”,就是找符号,有时候吧,还发现明明配置好的环境,cmd输入adb version,发现环境并没有,这时候又是一顿操作。
我的神仙朋友,你配置好了必须重新启动电脑,然后cmd输入adb version,这时候,你只要之前的操作都是对的,这时候一般性都是会有配置信息告诉你配置好了。
为什么我说一般,不是说肯定会有,因为这中间会出现小插曲,那就是第一次配置好的,第二次又没了,或者重启都没用的。这时候你就得看看了是不是Android_home没有配置或填错地方。
其次就是path变量出,是不是又少了符号,出现明明已经配置了环境,然后环境查不到的情况的时候,这时候最简单有效的就是重新配置一下
最后,其实于测试而言,不需要玩那些个操作,只需要下载SDK,然后配置环境变量就好了。用adb命令一查就知道了。Android SDK中自带ADB,所以不需要再次装什么ADB了,切记!
Java环境其实并没有太大的坑,顶多就是不适配,然后就是Android SDK中提到过的,环境明明配置好了,第二次用的时候环境又没了的情况,这种还是挺烦操的,怎么办呢!还能怎么办,重新配置,最好还是分开来写吧,不然时常发现,至于怎么避免,我也只能说认真检查,认真检查!
值得注意的是Java JDK也是需要home环境的,所以别搞错了。是在系统环境变量里面
这里必须告诉你,bin.,这个点你必须带上,别搞错了,很多时候就是因为不带点导致出了问题,自己也不知道咋回事。
进入到工具使用篇,那就大有文章了,这里面也设计到了很多的环境坑,需要配置各种环境,最容易出问题的地方也就在环境中,是不是总是配置不好,明明跟着脚步,却还是出了问题,百度也没用具体的答案。这时候你就很无奈,四处加群,问人,最终运气好的解决了,运气不好的,始终没有答案。
我们先来说说这个工具,这个工具时Android SDK自带的一款定位工具,唯一不足的一点就是有刷新不出想要定位的界面,需要重复刷新。其次就是没切换一个界面后就需要你重新刷新定位,然后就才能开始定位,繁琐这一步,它也是需要以来appium服务,才能跑起来。
它没有xpath定位给你复制,并不是它没用xpath功能,别被网上的说辞误导,你用不用xpath全取决于你自己,即使没用xpath给你复制也丝毫不影响你自己写xpath定位,懂吧,你可以写最简单的xpath就是定位文字。devices.find_element_by_xpath('//*[@text="登录"]'),这样的写法。
对于这个名字你是不是觉得很陌生,我没讲过这个工具,不过说来也是,我没有提到过这个名字,但是我是有讲的,那就是appium里面自带的工具。
看到这个界面很眼熟了吧,没错,就是这个,它就叫inspector,这个工具好处就是里面自带的工具挺多,不好的一点我也觉得比较让我难受,那就是每次定位完跑代码本来定位的界面会卡住一会,然后提示你断开连接,需要你重新连接它,反反复复就真的很难受了。
好的一点就是他里面的日志还是很明确的,也可以下载下来,这一点必须承认还是挺不错,里面自带的设置也是半个黑科技,总体上还是可以的。
前面两个配置上倒是没什么大问题,特别时uiautomatorviewer,在配置好Android SDK后完全不需要任何配置,直接打开用,inspector也是下载好appium也是可以用的,毕竟环境早配置好了。
但是这个工具就不一样了,他需要额外的使用两个小玩意。那就是Xposed,webviewdebughook,这两个用上了才能踏上你得小程序,混合app定位的道路。为什么不说可以开启道路了,只能说这是第一步,后面还有驱动配置。
xposed功能:能够继承很多功能模块,这些功能模块能够在不修改APK的情况下, 修改APP的运行方式。
webviewdebughook顾名思义就是开启APP的webview debug模式。
在这就会有很多朋友问我,为什么是神盾XP安装器,跟你们的不一样,你装过就会知道,有些xposed你激活不了,这时候你就需要用到黑科技,神盾Xposed了,一般性用这个都能成功激活,再装入webviewDebugHook插件就能踏入大门了。
uc-devtools这个工具,一看名字就知道uc跟uc浏览器啥关系,你百度就知道。这里面你必须知道的一个
你打开浏览器后,uc会自动抓取,你就会看到有这么一条信息,其中这里告诉你的是:你的模拟器中的浏览器驱动版本是68.0.3440.70,而不是其他的啥啥啥,你也别去看其他的,看了你也是个懵的。
当你跑程序的时候你会发现程序总是会报一个驱动问题,然后说建议下载使用71-75版本的驱动。注:这是我大概的翻译,别误会!
这里你是不是去百度了很多的东西,怎么改,怎么弄,最后你接近答案,改浏览器内核,可是模拟器浏览器内核怎么改,反正据我自己所知,这个一般改不了。所以我们寻求他路,网上会告诉你修改驱动路径,这里我明确的告诉你,出现我上述所说的,改什么驱动路径没啥用。这里我告诉你驱动路径,C:\Users\JX\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe,你需要去谷歌驱动的官网去下载一个符合你模拟器或者手机浏览器所对应匹配的版本比如这里说的68.0.3440.70版本的,那么你这个路径下的驱动换成这个版本的即可。
就是这么的直接,别纠结问题怎么了,为哈怎么改都不对。改不了内核,找个匹配的驱动还是简单的。
Airtest是网易的一款自动化测试工具,这个给我个人最大的亮点就是依靠鼠标就能简易的跑自动化,还是十分的强大的,里面也有很多的功能,使用起来也是十分的方便,对于Airtest坑倒是没有什么坑,只要你ADB能正常连接设备,这个基本上还是可以成功的,可能就是在使用过程中会遇见一些问题,比如:定位失败的情况,这都是细节操作的问题,Airtest讲究从头开始,不能半道上搞点操作。
这个工具是由uiautomator演变过来的,至于怎么演变的,那还得问真正的大哥大,它的原理就是在手机上运行了一个http rpc服务,将uiautomator中的功能开放出来,然后再将这些http接口封装成Python库,所以我们需要用到atx,如何装atx,很多朋友遇到过这样的一个问题,python -m uiautomator2 init(从github下载atx-agent文件,并推送到手机。在手机上安装包名为 `com.github.uiautomator`的apk)
这个命令推送不成功,是不是很多朋友都有遇到过,而且百度了很久,没有找到准确答案。这里就告诉你,这里ATX怎么样才能下载。
如果上述所说不行,那就试试这一招。打开pycharm,看你用的什么写的代码,这里我用的pycharm,确保模拟器或者手机连接,adb devices,检查,如何在pycharm里面写:
devices = u2.connect('emulator-5554')
# 打印设备信息
print(devices.info)
输入代码,连接模拟器的代码,并打印模拟器信息,手机一样的,adb devices查询连接信息,connect后面写上手机的连接号,运行一遍,atx就会自己给你装上了。
这个呢,就有一个非常便捷的方式,那就是可以通过局域网连接手机从未自动化操作,不需要usb数据线了。我前文章正好写了。别错过!
这个工具是在uiautomator2基础上用的,他们两配合,简直给自己省了不少的代码。之前的工具都需要写一堆的配置参数才行,这个嘛,完全不需要,直接连接就好,并且该定位工具显示的是实时的,更可以通过点击定位工具上的界面引动手机或模拟器的界面,也就是代点击。更有定位方法给你直接复制,此工具绝对是神器。
按键返回,代码复制,元素定位,代点击,你想的这里都有,想不到的这里也有。
附:你是不是有时候导包用的是selenium的库,比如: from selenium import webdriver
其实是from appium import webdriver,然后你发现为什么appium里面有些方法不能用。
毕竟是辅助定位工具,各有好坏,不要觉得我说这个是神奇就放弃了其他的,这些工具也可以相辅相成,定位嘛,当然多多益善。
id定位,name定位(text定位),class_name定位, accessibility_id定位,xpath定位等工具不同所以定位起来也大同小异,我们看看下面的操作。
注意:这里的id,name定位方式方法还是有一定的区别的,别一股脑的selenium学过定位,这些一个样的,so easy!!
这个工具的定位方法需要些很多的配置参数,比如:
desired_capas = {
"deviceName": "emulator-5554",
"platformName": "Android",
"appPackage": "com.Qunar",
"appActivity": "com.mqunar.atom.alexhome.ui.activity.MainActivity",
"platformVersion": "7.1.2",
"noReset": "True"
}
然而这个工具它也不支持xpath定位,你在里面复制不了.。
1. id定位 根据元素的resource-id属性值进行定位
2. name定位 根据元素的text属性值进行定位 Appium1.5之后移除了这种方式
3. class_name定位 根据元素的class属性值进行定位
4. accessibility_id定位 根据元素的content-desc属性值进行定位Android (IOS->label或name属性)
此工具这三种定位方式,根据对应的属性找对应的值即可。
此工具也就是前面所说的appium里面自带的,而此工具比uiautomatorviewer多了一个定位那就是xpath定位复制,界面中也多了一些按键类型的操作。
其中不管是uiautomatorviewer还是inspector定位工具,他们对于多元素定位都比较的直接,跟selenium库定位方式类似,这种的还是比较的喜欢的。
1. driver.find_elements_by_id()
2. driver.find_elements_by_name()
3. driver.find_elements_by_accessibility_id()
4. driver.find_elements_by_xpath()
它也可以获取文本属性值用于判断,看到这是不是特别的像selenium:
text属性 ele.text 获取元素的文本值
location属性 ele.location 获取元素的坐标
size属性 ele.size 获取元素的大小
tag_name属性 ele.tag_name 获取元素的标签名(元素class属性值)
混合APP的福音,虽然其他的工具照样的可以定位,但是专门的总是会有一定的优点,这个元素定位最值得注意的还是上下文。
Appium提供了操作context的方法
1. driver.current_context 获取当前界面的context,
2. driver.contexts 获取所有上下文,存储在一个列表中
3. driver.switch_to.context(context)
其中不被理解的就是有些界面不需要切换上下文,即使它是用原生界面到H5界面,这个清安也不能给到朋友解释,只能说你可以先不切换试试,在确定定位方法无误之后你再进行上下文切换。
此定位方法也要依赖appium,所以除开上下文之外,其他的定位与上文没有太大的区别。再就是切换上下文会报错的问题。也就是我上文提到过的建议你用什么什么版本的驱动这一块,也就是上下文会报的错。
AirtestIDE 是一个跨平台、多端(Windows、web、android、ios、游戏)的UI自动化测试编辑器,支持 自动化脚本录制、一键回放、报告查看。
它也不需要依赖appium,安装解压就可以用了,方便快捷,里面自带了很多的功能,不比appium自带的少,支持录制,鼠标点击等功能。
poco辅助窗是通过元素本身的属性来定位元素,常用的API如下:
attr(‘type’):提取指定元素属性为type的值
get_text(): 提取指定元素的文本内容
attr(‘text’): 通过给定的属性名检索ui元素的属性。如果属性不存在,则返回none(属性有visible、text、type、pos、size、name等)
exists():判断指定元素是否在当前屏幕上存在,存在true、不存在false
click(): 点击事件,可使用click(center)、click([0.5,0.5])、focus([0.5,0.5]).click()来点击控件中心位置
rclick():右键点击
double_click():双击操作
long_click():长按操作
swipe:滑动事件,如:swipe([0.2, -0.2], duration=1)以45度角滑动,持续1秒钟
drag:拖拽事件,如:poco(text=‘需要拖动位置’).drag_to(poco(text=‘目标位置’))
focus (local positioning):局部定位,如:poco(‘控件地址’).focus(‘center’).click()点击控件中间位置
wait:等待事件,如:poco(‘控件地址’).wait(2).click() 控件出现就点击,最多等待2秒
它里面自带的一些操作与其他的定位工具相比较也是大同小异,还是很容易区分开的。这个工具也是一个不错的神器,不过也请朋友根据自身的情况进行选择。
为什么我写uiautomator2不是写weditor,因为weditor是配合uiautomator2用的,uiaotomator是一个库,所以你懂的。
值得注意的是:Android SDK内置工具uiautomatorviewer.bat,但是运行uiautomator2的时候,uiautomatorviewer.bat 运行不起来,两者之间冲突太严重。
它的定位方式也与前者不同,让我们一起看看:
定位方式:
ResourceId定位: d(resourceId= "com.smartisanos.clock:id/text_stopwatch").click()
Text定位 d(text= "秒表").click()
Description定位 d(description= "..").click()
ClassName定位 d(className= "android.widget.TextView").click()
对于这些定位方式,weditor上面还是很明确的。uiautomator2最明显区别的一个点就是坐标定位超级方便,它也可以获取一个值进行判断,比如:d(text= "Settings").get_text()获取文本值。
uiautomator2最让我有感觉的一点就是连接方便,weditor工具好用,还是比较方便的,启动应用,想启动谁就启动谁d.app_start("com.example.hello_world" , ".MainActivity"),也可以直接跳到对应的界面。
assert不是什么定位工具,也不是什么库,就是一函数方法,它用处大着呢,看例子:
assert sess.xpath("App").get_text() == "App"
判断xpath定位的元素文本值是不是等于APP,返回TRUE或False
assert sess.app_current()['package'] == package_name
判断取值是否等于对应的值,返回TRUE或False。assert主要用于判断,有点像unittest中的断言操作。这里只是介绍给各位,实际上如何运用,看各位的操作了。
APP测试工具是有点多,这些也不是全部,项目也不会全部用,择一欢喜,也莫偏心,技多不压身。在这呢,望君少踩坑,入坑多来逛逛,自然就出坑了。