本篇主要是讲的是Appium的实战。
上一篇是环境安装,戳这里跳转
一、Appium前置条件
键 | 描述 | 值 |
---|---|---|
automationName | 自动化测试的引擎 | Appium or Selendroid |
platformName | 使用的手机操作系统 | ios,Android,FirefoxOS |
platformVersion | 手机操作系统的版本 | 7.1 ,4.4 |
deviceName | 使用的手机或模拟器类型 | * |
app | .apk / .ipa / .zip文件 | 指定url按装app:/storage/emulated/0/Android/data.apk |
browserName | 做自动化时使用的浏览器名字。如果是一个应用则只需填写个室的字符串 | 'Safari’对应iOS,‘Chrome’,‘Chromium’;'Browser’则对应 Android |
appPackage | 绝对路径 | com.splash |
appActivity | 相对于应用包名 | .SplashScreen |
newCommandTimeout | 用于客户端在退出或者结束session之前, Appium等待客户端发送一条新命令所花费的时间(秒为单位) | 例加60 |
Language | (Sim/Emu-only) 为模拟器设置语言 | 例如fr |
Locale | (Sim/Emu-only) 为模拟器设置所在区域 | 例如fr_CA |
udid | 连接真机的唯设备号 | 例如lae203187fc012g |
orientation | (Sim/Emu-only) 模拟器当前的方向 | 竖屏或横屏 |
设置参数:
注意:1.appPackage 和 appActivity 参数存在,app 参数为空。2.app 参数与 browserName 不兼容。
platformName:Android,固定写法
platformVersion:这个是手机的Android的版本
deviceName:这个是手机的名字,一般都随意设置,方便自己识别不同手机就行
automationName:固定写法Appium
autoAcceptAlerts: true , 默认选择接受弹窗的条款,有些app启动的时候,会有一些权限的弹窗,例如
app:指定路径帮你安装apk应用
,并打开!
noReset:true: 每次appium对app进行操作的时候,为了不保存修改的数据和app设置的内容而不影响下次使用,需要设置为true
appPackage:app启动的应用程序的文件名(通过下面ADB命令查看会很方便)
appActivity:app启动的入口文件名(通过下面ADB命令查看会很方便)
newCommandTimeout :如果APP应用程序60s无反应,那么则会自动退出,回到主页面。
配置格式:
1.1、Android:仅有的参数:
appActivity:Android里面应用程序入口启动页面
appPackage:包名(应用程序在模拟器或者真机上面都有一个唯一的名字)
举个例子:夜神上面:查找包名路径:工具—Amaze–Android–data-
包名就是:cn.toside.music.mobile
1.2、IOS:
{
'platformName': 'iOS',
'platformVersion': '7.1',
'deviceName': 'iPhone Simulator',
'app': myApp
}
二、参数配置
代码层面:参数配置
desired_caps = {
# 'automationName': 'Appium',
'platformName': 'Android', # Android or ios
'platformVersion': '7.1.2', # 版本
'deviceName': 'ye_shen_Android', # 真机或者模拟器的名字
'appPackage': 'cn.toside.music.mobile', # 启动应用程序的文件名,下面第三个ADB命令获取
'appActivity': 'cn.toside.music.mobile.MainActivity', # 启动应用程序入口文件名,第三个ADB命令获取
'noReset': True, # 永远初始化,不保存数据
'autoAcceptAlerts': True, # 权限的弹窗
'newCommandTimeout': 60 # 应用程序退出时间间隔
}
夜神模拟器端口号:127.0.0.1:62025 device ;127.0.0.1:62001 device
常用的ADB命令:
1.链接模拟器:adb connect 127.0.0.1:62025
2.查看链接的设备:adb devices
3.查看被测的包名以及入口启动页面:aapt dump badging 测试路径
我需要测试的应用放在:D:\exe\lx-music-mobile-v0.14.3-arm64-v8a.apk
那么命令就是:aapt dump badging D:\exe\lx-music-mobile-v0.14.3-arm64-v8a.apk
appPackage:
appActivity:
分别用这两个命令也可找得到:
aapt dump badging D:\exe\lx-music-mobile-v0.14.3-arm64-v8a.apk | findstr package
aapt dump badging D:\exe\lx-music-mobile-v0.14.3-arm64-v8a.apk | findstr Activity
三、模拟器启动一个 Appium 应用程序(Android)
根据第二点的准备工作,最后两步骤:
最后的准备:
1.appium server 启动
2.模拟器 / 手机 识别成功
Python 代码:点击运行,结果成功打开了夜神模拟器自己下载的一个应用程序。
from appium import webdriver
desired_caps = {
# 'automationName': 'Appium',
'platformName': 'Android', # Android or ios
'platformVersion': '7.1.2', # 版本
'deviceName': 'ye_shen_Android', # 真机或者模拟器的名字
'appPackage': 'cn.toside.music.mobile', # 启动应用程序的文件名
'appActivity': 'cn.toside.music.mobile.MainActivity', # 启动应用程序入口文件名
'noReset': True, # 永远初始化,不保存数据
'autoAcceptAlerts': True, # 权限的弹窗
'newCommandTimeout': 60 # 应用程序退出时间间隔
}
# 发送指令给 appium server , command_executor 是指 appium server 的地址端口
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
三、真机启动一个 Appium 应用程序(Android)
将手机用数据线连接到电脑,并授权USB调试模式。查看连接的效果,在cmd下运行命令:adb devices查看UDID,如下图所示:
方法一:cmd命令行启动:-U 参数后面跟的一串字符就是手机的UDID,这个是通过第二步查到的。
根据查到的UDID启动appium服务,运行命令:appium -a 127.0.0.1 -p 4723 –U HDP9K18629901709 --no-reset
能够打开,即成功打开 Appium Server了。可以去运行代码了。运行端口4723,修改安卓手机版本即可。
要是返回这个:
先确认npm命令有无输出:有好办,按照下面内容走下去,没有,那就去上一篇是环境安装,戳这里跳转
在命令行下载 :Appium Server ,命令:npm install -g appium --ingore-webdriver-install
下载完成后再输入:appium -a 127.0.0.1 -p 4723 -U HDP9K18629901709 --no-reset
完成后运行python代码:
from appium import webdriver
desired_caps = {
# 'automationName': 'Appium',
'platformName': 'Android', # Android or ios
'platformVersion': '7.1.2', # 模拟器版本7.1.2 手机端版本 8.1
'deviceName': 'ye_shen_Android', # 真机或者模拟器的名字
'appPackage': 'cn.toside.music.mobile', # 启动应用程序的文件名
'appActivity': 'cn.toside.music.mobile.MainActivity', # 启动应用程序入口文件名
'noReset': True, # 永远初始化,不保存数据
'autoAcceptAlerts': True, # 权限的弹窗
'newCommandTimeout': 60 # 应用程序退出时间间隔
}
# 发送指令给 appium server , command_executor 是指 appium server 的地址端口
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
方法二:还是用windows版本启动:只不过要在代码里修改与模拟器不相同的版本
只需修改上面的代码:'platformVersion': '8.1', # 模拟器版本7.1.2 手机端版本 8.1
即可!!!按照自己的来,博主是链接了两个都有:
四、查看日志
蓝色:appium server 启动 ,基于http里面的Post请求,创建一个会话createSession()
灰色:WINDOS发出的指令,包含ADB命令
黄色:警告 相当于debug
用到Android SDK里面的UiAutomator1这个框架。并且Android SDK里面还存UiAutomator2这个框架。现在还是UiAutomator1。
python自动化脚如何操作手机终端的过程:
1、自动化脚本发送HTTP请求,请求参数:终端设置参数
2、创建会话
3、确认终端设备是否链接,并且确认安卓版本,确认设置参数是否与终端的设置是否一致
4、appium会推送一个jay包-->AppiumBootstrap.jar包,在模拟器上,相当于Api指令,appium server指令进行接收,操控手机端。
5、响应http请求
6、下一个http请求
在模拟器上,相当于Api指令,appium server指令,操控手机端。
五、Appium 自动化测试元素定位工具使用
1、uiautomatorviewer.bat
iautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。
启动uiautomatorviewer.bat两种启动方式:
a.通过上一篇文章添加的全局变量,打开cmd然后输入:uiautomatorviewer.bat
b.在android-sdk安装目录下tools文件夹,有启动bat入口:uiautomatorviewer.bat
在启动模拟器或者真机之后:点左上角安卓机器人按钮Devices Screenshot按钮刷新页面
就会出现页面:右边是它的属性。
元素定位操作:移动鼠标到需要定位的元素上,如搜索输入框
需要刷新界面,再次点击Devices Screenshot按钮刷新页面。
右下角可以看到元素对应的属性:
属性 | 解释 |
---|---|
index | 索引 |
text | 文本 |
resource-id | 唯一id |
package | 包名 |
content-desc | 属性是用来描述该元素的作用,一般都是为空 |
checkable | 是否能选择 |
checked | 可以选择 |
clickable | 能点击 |
enabled | 可用 |
focusable | 能聚焦 |
focused | 已经聚焦 |
scrollable | 能滚动 |
long-clickable | 长按 |
password | 输入框是不是已密文显示 |
selected | 选择 |
bounds | 坐标,两组,第一组原点在左上角,第二在右下角 |
- iautomatorviewer 缺陷:
- 不可以可其他终端占用,包括appium里的Inspector和Weditor工具
2、Inspector
- Inspector是 Appium server 自带的一个元素定位工具,可以查询到我们需要定位的元素的 id 等各种信息
- JSON Representation:贴我们的配置项参数
注意布尔值为小写
desired_caps = {
'platformName': 'Android',
'platformVersion': '7.1.2',
'deviceName': 'ye_shen_Android',
'appPackage': 'cn.toside.music.mobile',
'appActivity': 'cn.toside.music.mobile.MainActivity',
'noReset': true,
'autoAcceptAlerts': true,
'newCommandTimeout': 60
}
- 点击另存为,然后保存,那页面就会变成这样:
- 下一步我们点击启动会话,那页面跳转到这个页面了
- 操作应用 选择APP应用的需要操作的位置,点击Tap按钮,模拟的是点击按钮
- 但是有些页面无法调试:
3、Weditor(推荐)
- Uiautomator2 python的第三方库,appUi自带的框架定位方式。
- 安装:
- pip install Uiautomator2
- python -m uiautomator2 init
- pip install weditor
如果安装不了weditor参考我的另外一篇文章:戳这里
验证:weditor --help
- 3.1启动
- cmd输入:
weditor
,会弹出web页面:http://localhost:17310/#
- 我现在换了一个app测试叫做:测测app:
desired_caps = {
'platformName': 'Android',
'platformVersion': '7.1.2',
'deviceName': 'ye_shen_Android',
'appPackage': 'com.xxwolo.cc5',
'appActivity': 'com.cece.app.MainActivity',
'noReset': true,
'autoAcceptAlerts': true,
'newCommandTimeout': 60
}
-
根据上面的text或者xpath定位方式可以定位到页面元素,而且给出了值
-
如果是真机的话,那么:
结果:resourceld 是唯一id
,真机调试借鉴文章
-
注意一点:如果weditor显示app页面错位,那么去清除浏览器缓存即可恢复正常
-
第二点:weditor的html属性显示出来的description栏位对应的就是 content-desc
六、查看ADB命令:常用adb操作
原文戳这里
- 查看app包名和启动页Activity的方法:打开
- 前提:adb连接手机设备,并且点击需要获取APP应用,并迅速执行相关命令
- 一般会包含 ui 、activity、Activity单词在内。
- THF123456 换自己的UIID
adb -s THF123456 shell dumpsys window w |findstr \/ |findstr name=
即:
"appPackage": "com.ss.android.ugc.aweme",
"appActivity": "com.ss.android.ugc.aweme.splash.SplashActivity"