一. Appium相关官方文档
二. 安装及环境配置
1. Appium Server
Appium Server 的安装其实还可以通过 Appium Desktop 一步实现。但 Appium Desktop 在 v1.22 时发现了安全问题并且宣布不再维护,因此我们选择单独搭建Appium Server。
(1)Node.JS
Appium Server 是通过 Node.JS 实现的,因此我们需要先配置 Node.JS 环境
- 在 Node.JS 官网下载安装包之后安装即可
- 使用命令
node -v
和npm -v
检查环境及版本,如果正常显示版本则证明安装成功- 如果需要更改 npm 的镜像源时可以使用指令
npm config set registry <镜像源地址>
更改,并使用指令npm config get registry
确定镜像修改成功
- 如果需要更改 npm 的镜像源时可以使用指令
(2)appium & appium-doctor
npm install -g appium
以全局安装appium服务(linux/mac如果安装时遇到权限引起的问题可以使用sudo npm install -g appium
)npm install -g appium-doctor
以全局安装appium环境检测工具,该工具用来检测 appium 环境是否满足需求
执行appium-doctor
对环境进行检测,检测结果如下(此处显示的并不是完整结果,只是截取了部分)- 检测结果中状态为WARN且为黄色 x 的条目我们可以先忽略(例如图中的 opencv4nodejs cannot be found.)
(3) 配置driver
如果我们不配置driver直接启动appium时会提示我们 No drivers have been installed,这是由于 Appium 2.0+ 驱动是分开管理的,因此我们需要单独安装驱动
appium driver list
查看所有可用的驱动列表
我们暂时先只安装Android常用驱动 uiautomator2 即可,执行 appium driver install uiautomator2
进行安装(同样如果linu/mac有权限问题可以使用 sudo appium driver install uiatomator2
)
2. 移动设备与SDK
我们暂时只考虑并使用安卓手机进行操作,我们需要安装sdk并连接到手机
- sdk安装可以参考文章:AndroidSDK安装(Mac) 或 AndroidSDK安装(Windows)
- 可以考虑使用夜神模拟器:下载地址
- 启动之后我们需要执行
adb connect 127.0.0.1:62001
让adb识别到模拟器(如果是真机则需要启动开发者模式才可以被adb识别) adb devices
命令可以找到设备证明已经正常连接到模拟器
- 启动之后我们需要执行
adb connect <ip:port>
指令可以连接到非线控设备
3. 环境验证
到此为止我们的Appium Server已经配置完毕并且可以进行测试了,提供测试代码如下
import time
from appium import webdriver
from appium.options.common.base import AppiumOptions
options = AppiumOptions()
opts = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='Android',
appPackage='com.android.settings',
appActivity='.Settings',
)
driver=webdriver.Remote('http://localhost:4723', options=options.load_capabilities(opts))
print("启动【设置】应用")
time.sleep(5)
driver.quit()
- 终端执行指令
appium
启动 Appium Server adb devices
确保adb连接设备正常- 将代码保存并通过 Python 执行即可,如果可以正常打开+关闭手机设置证明一切正常
4. Appium Inspector
Appium Inspector 对我们帮助很大,例如分析UI,录制,定位元素。因此我们需要安装 Appium Inspector 供我们使用(下载地址在第一章已经提供)
安装并打开 Appium Inspector 之后我们需要对 Desired Capabilities 进行配置,下面所展示的所有字段都是必填字段,需要根据实际填写
platformName
:设备的系统平台,例如:Android、iOSappium:automationName
:我们使用的 driver 的名字(启动 Appium Server 时会展示该字段信息,复制粘贴即可)
字段填写完毕之后点击 Start Session 按钮就可以连接到设备(注意一定要确保 Appium Server 已经启动,设备已经被adb识别。)
大多数时候我们希望捕获的是一个应用内的页面。此时有两种方法,其一是我们操作设备之后刷新 Appium Inspector,其二是我们接下来要重点说的方式,增加 Desired Capabilities 配置信息
配置信息前我们需要找到应用对应的包名及激活页
执行指令 adb logcat ActivityManager:I | grep "cmp"
该指令会动态展示日志,因此当执行指令之后打开我们想启动的应用,此时日志最底部新生成的日志便包含我们应用的信息,当中 cmp 内容就是我们想要的包信息,其结构为 appPackage/appActivity。
appium:deviceName
:该字段是我们自定义的一个命名,通常设置为adb识别到对应设备的设备名appium:appPackage
:我们想要启动的应用的包名,即我们刚才找到的 appPackageappium:appActivity
:页面名字,即刚才我们找到的 appActivity
填写配置完毕之后点击 Start Session 按钮就会连接到设备并打开指定应用
三. Capabilities
Capabilities 并不是我们的重点,但确是使用Appium没法绕开的话题,仅此我们在本章将会简单的进行介绍。
Capabilities 是用来对 driver 进行配置的参数,以键值对的形式设置。对于不同的驱动可能有不同的参数且并不是所有的驱动都可以接受所有参数。
但无论在任何时候有两个参数是必须要设置的:
- platformName 设备类型,通常为Android,iOS
- appium:automationName 要使用的驱动,例如我们之前安装的 Uiatomator2
观察上述两个参数中 automationName 比较特殊
,在他之前加入了 appium:
的前缀。这是由于 WebDriver 规范要求任何非标准拓展之前都需要加入空间前缀以表明引入该功能的应用商。标有前缀的参数不是少数,因此我们有一种特殊的写法来避免重复书写前缀
capabilities = {
"platformName": "Android",
"appium:options": {
"automationName": "UiAutomator2",
"noReset": True
}
}