Appium
0x01 原理与安装
(1)用途与特点
- 用途
- 自动化完成一些重复性任务
- 爬取信息
- 自动化测试
- 特点
- 开源免费
- 支持多平台
- 支持多类型
- 操作系统原生界面自动化
- 应用内嵌 WebView 自动化
- 浏览器中 Web 网站自动化
- flutter 应用自动化
- 支持多语言
(2)原理
graph LR
A(自动化程序<br/>Appium 客户端库)--HTTP-->B(Appium Server)
B--HTTP-->A
B-->C(设备)
C-->B
自动化代理控制:
- iOS 9.3+:XCUITest 框架
- Android 4.2+:UIAutomator 框架
(3)自动化环境搭建
以下内容以 Android APP 自动化为例
-
安装 client 编程库:
pip install appium-python-client
-
安装 Appium Server:Appium Desktop 官方下载地址
Appium Server 基于 JavaScript 开发,使用 Node.js 运行
-
安装 JDK
-
安装 Android SDK
-
连接手机(Android 10)
- 在手机上执行以下操作:设置 > 关于手机 > 点击版本号(反复点击直至提示已经打开了开发者模式)
- 在开发者选项中,启动 USB 调试
- 使用 USB 将手机与电脑连接
- 在电脑上执行命令
adb devices -l
来查看已连接的设备
0x02 应用与实践
(1)代码实例
测试:打开手机端的 Bilibili:
- 注意:测试运行前,须开启 Appium Server Desktop
- Appium Settings 会在程序运行时自动安装至手机上
from appium import webdriver
from appium.webdriver.common.appiumby import By
from appium.webdriver.extensions.android.nativekey import AndroidKey
desired_caps = {
'platformName': 'Android', # 测试平台为 Android
'platformVersion': '11', # 平台版本为 11
'deviceName': '', # 设备名,安卓可以为空
'appPackage': 'tv.danmaku.bili', # 启动 APP Package 名称
'appActivity': '.MainActivityV2', # 启动 Activity 名称
'unicodeKeyboard': True, # 使用自带输入法,输入中文时为 True
'resetKeyboard': True, # 执行完程序恢复原来的输入法
'noReset': True, # 不要重置 APP
'newCommandTimeout': 6000,
'automationName': 'UiAutomator2'
}
# 连接 Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 设置缺省等待时间
driver.implicitly_wait(10)
# 根据 id 定位搜索位置框并点击
driver.find_element(By.ID, 'expand_search').click()
# 根据 id 定位收缩输入框并发送需要搜索的内容
driver.find_element(By.ID, 'search_src_text').send_keys('Appium 开发教程')
# 输入回车键确定搜索
driver.press_keycode(AndroidKey.ENTER)
# 选择定位所有视频标题
videos = driver.find_elements(By.ID, 'title')
for video in videos:
print(video.text)
input('Press any to quit...')
异常处理:
- Android 版本错误(鸿蒙系统可以用 Android 10 表示)
- OPPO 手机启动appium报错
java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
(2)查看应用的 Package 和 Activity
a. 没有 apk
该类应用一般为在应用商店下载并直接安装的应用。
-
在电脑上运行 Appium Server Desktop
-
在手机上运行需要查看的应用
-
在 cmd 中执行命令
adb shell dumpsys activity recents | find "intent={"
,回显为:intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.MainActivityV2 mCallingUid=10101} intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.oppo.launcher/.Launcher}
其中的
cmp=tv.danmaku.bili/.MainActivityV2
内容格式为cmp=[package]/[activity]
b. 有 apk
- 在 cmd 中执行命令
aapt dump badging [apk path] | find "package: name="
- 在 cmd 中执行命令
aapt dump badging [apk path] | find "launchable-activity"
(3)元素操作
省略 Selenium 基础
a. 定位元素
# 引用相关配置
from appium.webdriver.common.appiumby import By
b. 页面元素查看工具
使用以下两样工具:
- Android SDK 中的 uiautomateviewer
- 必须在 jdk 1.8 环境中使用
- 通过菜单栏第二项的 Device Screenshot 获取手机显示快照,用鼠标选中目标元素,即可对其属性进行查看
- Appium Desktop 中的 Appium Inspector
c. 操作元素
类似 Selenium