介绍
Appium看名字就知道和selenium是一类的,让机器模拟人去操作,这里介绍常见的Android和IOS配置和踩坑。
建议看官方英文文档,网上的很多文章太老了现在完全不适用,而且官方中文文档很多没翻译过来还是TODO状态...
Appium是一个自动化开源工具,支持iOS、Android和Windows桌面平台上的原生、移动Web和混合应用的自动化。Appium是跨平台的:它允许你用同样的API对多平台(iOS、Android、Windows)写测试。做到在iOS、Android和Windows测试套件之间复用代码。
官方文档:https://appium.io/docs/en/latest/
服务端配置
nodejs
^14.17.0 || ^16.13.0 || >=18.0.0
npm
>=8
Appium 服务端
npm i -g appium npm update -g appium # 更新
配置好后,直接运行 appium
就可以启动服务端。
Driver
【Android】UiAutomator2
安卓的配置比较简单方便,使用UiAutomator2,需要的环境和步骤如下:
export ANDROID_HOME=/Users/d4m1ts/Library/Android/sdk/platform-tools
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home
在真机上启动USB调试
appium driver install uiautomator2
【IOS】xcuitest
iOS上相对比较麻烦,driver使用xcuitest,配置可参考官方文档
appium driver install xcuitest
可使用如下命令来检测依赖是否正常,把缺失的依赖安装上即可(最好还是看文档,里面有很多可选的依赖都可以装上。
appium driver doctor xcuitest
依赖解决后,一些在手机上的配置项:
- 设置 -> 通用 -> 键盘 -> 自动改正(关闭,默认开启
- 设置 -> 通用 -> 键盘 -> 预测文本(关闭,默认开启
- 设置 -> 辅助功能 -> 缩放(关闭,默认关闭
- 设置 -> 辅助功能 -> 朗读内容 -> 朗读所选内容(关闭,默认关闭
- 设备连上Mac后选择信任设备
- 使用 iOS/iPadOS 16 或更高版本的设备需要启用开发者模式:设置 -> 隐私与安全性 -> 开发者模式;重启后还需要配置:设置 -> 开发者 -> 启用 UI 自动化(如果没得开发者模式,连线打开XCode后再看看可能就有了
通过xcodebuild
安装WebDriverAgentRunner-Runner
(WDA) 与被测设备进行通信,运行如下命令直接在 Xcode 中打开 WebDriverAgent.xcodeproj
appium driver run xcuitest open-wda
因为没有付费开发者账户,所以必须手动进行签名配置WDA,我这里采用的是完全手动配置
先进入WDA的目录下,创建目录和文件:
mkdir -p Resources/WebDriverAgent.bundle
选中WebDriverAgentRunner
项目后,再选择Build Settings
,修改Bundle Identifier
为可接受的内容
然后在 Signing & Capabilities
中选择Team,没有出现问题就OK了
最后安装到手机上,步骤如下:
- Product -> Scheme -> WebDriverAgentRunner
- Product -> Destination
- Product -> Test
安装好后还需要信任,信任后再点一下刚才安装的WDA软件启动一次即可。
客户端
主要推荐2个客户端,1个是带图形化界面方便分析的,1个是纯py脚本的
appium-inspector
A GUI inspector for mobile apps and more, powered by a (separately installed) Appium server
主要用于看各类元素说明啥的
可直接下载 appium-inspector安装
Android
打开 Appium Inspector,在 JSON Representation 中填入如下数据:
{
"platformName": "Android",
"appium:automationName": "uiautomator2",
"appium:deviceName": "AOSP_on_blueline", // adb devices -l 中model后的内容
"appium:platformVersion": "10", // adb shell getprop ro.build.version.release
"appium:appPackage": "com.tencent.mm", // adb shell dumpsys activity | grep mResumedActivity
"appium:appActivity": ".ui.LauncherUI",
"appium:noReset": true
}
具体的字段和说明参考:https://github.com/appium/appium-uiautomator2-driver?tab=readme-ov-file#capabilities
配置后点击 Start Session
出现如下的界面就OK了,可以看到各种元素
在 Session Information
的面板中,也可以看到示例代码,可以直接复制过去用
IOS
打开 Appium Inspector,在 JSON Representation 中填入如下数据:
{
"platformName": "ios",
"appium:automationName": "xcuitest",
"appium:deviceName": "00008120-00084DCC36F8A01E", // udid
"appium:platformVersion": "17.4.1",
"appium:udid": "00008120-00084DCC36F8A01E", // udid
"appium:noReset": true
}
具体的字段和说明参考:https://appium.github.io/appium-xcuitest-driver/latest/reference/capabilities/
其他操作就和Android一样了
Appium-Python-Client
通过上方的GUI客户端可以快速的定位元素、生成示例代码,也可以录制操作自动变成代码,其中函数和selenium差不多,就不赘述了。
依赖安装:pip install Appium-Python-Client
一些demo可参考 functional test code,完整的文档可参考 Documentation
# This sample code supports Appium Python client >=2.3.0
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
from appium.options.common.base import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy
# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput
options = AppiumOptions()
options.load_capabilities({
"platformName": "Android",
"appium:automationName": "uiautomator2",
"appium:deviceName": "AOSP_on_blueline",
"appium:platformVersion": "10",
"appium:appPackage": "com.tencent.mm",
"appium:appActivity": ".ui.LauncherUI",
"appium:noReset": True,
"appium:ensureWebviewsHavePages": True,
"appium:nativeWebScreenshot": True,
"appium:newCommandTimeout": 3600,
"appium:connectHardwareKeyboard": True
})
driver = webdriver.Remote("http://127.0.0.1:4723", options=options)
driver.quit()
其他
XCode在编译时,好像需要最新版本的iOS虚拟机镜像,就比如我安装了17.4.1,但更新了有17.5,我不安装就还是不能编译,从XCode中自带的下载的话经常失败,所以记录一下手动更新办法:
# 需要开发者账号(我也不知道为啥我的一个账号变成开发者了,反正能用
# 访问 https://developer.apple.com/download/all/?q=ios 找最新版
sudo xcode-select -s /Applications/Xcode.app
xcodebuild -runFirstLaunch
xcrun simctl runtime add '/Users/用户/Downloads/iOS_17.2_Simulator_Runtime.dmg'