快速上手Appium进行移动端自动化测试主要分为三步:安装工具、学会定位App里的元素、编写并运行第一个脚本。
上手指南:
准备工作:安装工具:需要安装 Node.js,然后通过npm安装Appium。同时,Appium依赖于Java,需要安装并配置JDK。如果测试Android,还需安装Android SDK,并为测试iOS准备Xcode。想看到App里的元素,推荐安装 Appium Inspector。要编写脚本只需通过pip或 npm等包管理器安装对应编程语言的Appium客户端库即可。
学会定位元素:编写测试重点是告诉Appium你想操作屏幕上的哪个按钮或输入框,这就是元素定位。优先级是:ID > accessibility id > XPath。
运行你的第一个脚本:编写一个简单的测试脚本来体验完整流程。基本步骤包括:导入 Appium 库、配置连接参数 (Desired Capabilities)、连接 Appium Server、执行操作 (如点击)、最后退出。
具体操作细节和调试方法。
第一步:环境搭建 (以Android+Python为例)
环境没搭好,后面就无法进行。我们以最常见的组合:在Windows/macOS上测试Android应用,并用Python编写脚本为例,需要安装以下几个组件:
安装 Node.js 和 Appium 服务器:
Appium Server 是一个Node.js程序,它接收测试脚本的指令,并翻译给手机去执行。
从 Node.js官网 下载并安装 LTS 版本。
安装完成后,打开“命令提示符” (Windows) 或“终端” (macOS/Linux),输入以下命令来全局安装最新版的 Appium 2.x:
bash
npm install -g appium
接着,安装用于驱动 Android 设备的驱动程序:
bash
appium driver install uiautomator2
安装 Java Development Kit (JDK):
Appium 的底层依赖 Java 环境。
推荐从 Oracle官网 下载并安装 JDK 21 或更高版本。
安装后需要配置环境变量:
Windows: 在系统属性 -> 环境变量中,新建一个名为 JAVA_HOME 的系统变量,其值为你的 JDK 安装途径(如 C:\Program Files\Java\jdk-21)。然后编辑 Path 变量,新建一条 %JAVA_HOME%\bin。
macOS/Linux: 编辑你的 ~/.bash_profile 或 ~/.zshrc 文件,添加以下两行:
bash
export JAVA_HOME="你的JDK安装途径"
export PATH=$JAVA_HOME/bin:$PATH
保存后,执行 source ~/.bash_profile (或 source ~/.zshrc) 使配置生效。
安装 Android SDK 并配置设备:
安装 Android Studio:这是获取 Android SDK 最简单的方式。从 Android Studio官网 下载安装。
配置 SDK 环境变量:
安装完成后,找到 Android SDK 的安装途径(可在 Android Studio 的 SDK Manager 窗口顶部看到,一般记为 ANDROID_HOME)。
同样,在系统环境变量中,新建一个名为 ANDROID_HOME 的变量,值为SDK途径。
编辑Path变量,添加 %ANDROID_HOME%\platform-tools 和 %ANDROID_HOME%\tools。
准备测试设备可以用真机或模拟器。
真机:用 USB 线连接电脑和手机,在手机的“开发者选项”中,开启“USB 调试”。
模拟器:在 Android Studio 的 AVD Manager 中创建一个虚拟设备并启动。
测试连接:打开终端,输入 adb devices。如果看到设备列表中有你的设备,并且状态是 device,就说明连接成功了。
安装 Appium 客户端库 (Python):
这是用来编写测试脚本的。我们以 Python 为例。
保证你的电脑已安装 Python (推荐 3.7+),然后在终端中执行:
bash
pip install Appium-Python-Client
这也会自动安装 Selenium 库,因为Appium的API和之类似。
安装Appium Inspector:
用途:这是一个图形化工具,可以帮你“看到”手机App里的各个元素(如按钮、文本框)及其属性,是定位元素的神器。
获取方式:从 Appium Inspector 的 GitHub Releases 页面 下载适合你操作系统的版本并安装。
移动测试工作台就搭建完毕了。
第二步:元素定位技能
在编写测试前,必须知道怎样告诉Appium想操作哪个元素。需要准确的描述。
常用的定位方法(推荐优先级从高到低):
ID定位:元素的 resource-id,driver.find_element(AppiumBy.ID, "com.example:id/button"),第一选择! 速度最快且最稳定,适用于ID唯一的元素。
Accessibility ID:元素的 content-desc 属性,driver.find_element(AppiumBy.ACCESSIBILITY_ID, "登录按钮"),次选! 跨平台兼容性好,尤其推荐在 iOS 中使用。
XPath定位 元素的层级途径:driver.find_element(AppiumBy.XPATH, "//android.widget.Button[@text='登录']"),备选方案。 非常强大灵活,但查找速度慢且脚本脆弱,界面稍改就易失效,应最后考虑。
使用 Appium Inspector 找到元素属性
启动 Appium Server: 在终端输入 appium 并回车。
连接 Appium Inspector: 打开 Appium Inspector,配置 Desired Capabilities(和下面的示例类似),然后点击 Start Session。
检查元素: Inspector 会显示手机屏幕截图和完整的元素树。点击左侧屏幕的任意元素,右侧会显示所有属性,其中id, accessibility-id, xpath 等就是需要定位符的值。
第三步:运行你的第一个脚本
现在我们把所有东西串起来。目的是:启动系统设置App -> 找到“关于手机”选项 -> 点击它。
前置条件: 保证 Appium Server 在后台运行 (在终端执行 appium)。
Python 脚本示例 (my_first_test.py):
python
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
import time
# 1. 设置Desired Capabilities,告诉Appium服务器要连接哪个设备、测试哪个App
options = UiAutomator2Options()
options.platform_name = "Android"
options.platform_version = "11.0" # 替换为你设备/模拟器的Android版本
options.device_name = "emulator-5554" # 替换为你通过'adb devices'看到的设备名
options.app_package = "com.android.settings" # 设置应用的包名
options.app_activity = ".Settings" # 设置应用的启动页
options.automation_name = "UiAutomator2"
options.no_reset = True # 让App保持登录/启动状态,不清除数据[reference:37]
# 2. 创建会话,连接到Appium服务器 (默认端口4723)
driver = webdriver.Remote("http://127.0.0.1:4723", options=options)
# 设置一个隐式等待,当查找元素时,最多等待10秒
driver.implicitly_wait(10)
try:
# 3. 执行操作
# 使用Accessibility ID(内容描述)定位“关于手机”选项,并点击
# 这里的"About phone"是元素的内容描述,你可以用Appium Inspector在系统设置中找到它
about_phone_option = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "About phone")
about_phone_option.click()
print("成功点击 '关于手机'!")
time.sleep(2) # 纯粹为了能看到点击效果
finally:
# 4. 结束会话,释放资源
driver.quit()
运行脚本: 保存上述代码为 my_first_test.py,在终端执行 python my_first_test.py。如果一切正常会看到手机或模拟器上的设置应用自动打开,并跳转到了关于手机页面。
第四步:常见问题调试
遇到报错是正常的,这里有一些最常碰到的问题:
adb devices 显示 unauthorized: 这意味着电脑和手机未建立信任关系。解决方法:连上手机后,手机上会弹出“允许USB调试吗?”的弹窗,点击“允许”即可。
adb server version ... doesn't match ... (版本不一致): 一般是你电脑上有多套 adb 程序。解决方法:将 Android SDK 的 platform-tools 目录下的 adb.exe 文件,复制并包括到其他软件(如一些手机助手或模拟器)的安装目录下。
找不到元素 (NoSuchElementException): 最常见的情况。可能的原因和排查步骤:
元素还未加载出来:页面跳转或动画需要时间。解决方案:使用 显式等待 (WebDriverWait),这比固定的 time.sleep() 更智能高效。
定位器写错了或变化了:用 Appium Inspector 再次确定元素的定位符是不是准确无误。
切换到了不同的上下文(如WebView):如果App里嵌入了网页,需要先切换到对应的 context 才能定位网页里的元素。