很多初学者看到“Appium”这个词,第一反应是去下载一个Appium Desktop,然后双击打开,看到界面有一堆英文按钮,接下来就不知道怎么办了。我见过太多人在这一步卡住,实际上Appium的安装并不复杂,但它不是“下一个软件就能用”的工具,而是一整套环境联动:JDK、Node.js、Android SDK、adb、driver、Inspector,每一块都得装对、配好,顺序也不能乱。这篇文章我会以Windows环境为例,从零开始,手把手带你完成Appium下载安装配置,最后用Appium Inspector成功看到手机屏幕,整个过程适合刚接触移动端自动化测试、或者之前装了好几次都没跑起来的同学。
先说清楚一件事:整篇内容是基于Appium 2.x版本讲的,因为1.x已经停止维护了,网上一堆老教程还在按1.x时代的方式配置,新手照着做很容易踩版本坑。后面涉及的命令、配置、工具我都会尽量给出完整步骤和验证方法。
1. 先搞明白Appium跑起来需要哪几块积木
1.1 Appium本身的架构,为什么它不能单独工作
Appium是一个移动端自动化测试框架,核心是基于C/S架构的:一端是Appium Server,负责接收你的测试指令并转发给设备上的自动化引擎;另一端是Appium Client,也就是你用Java、Python等语言写的测试脚本,或者可视化工具Appium Inspector。
问题在于,Appium Server自己是跑在Node.js环境里的程序,它要操作Android设备,又得靠adb这条通道来装APK、截图、获取页面信息;而真正在Android设备里执行点击、滑动这些动作的,是UiAutomator2这个自动化引擎,Appium还要为它单独安装对应的driver。说白了,Appium是一个“调度中心”,它自己不做脏活累活,而是指挥一堆底层工具干活。
这也解释了为什么安装Appium不是下载一个安装包就完事,而是要把下面这些组件全部准备好:
| 组件 | 作用 | 不装会怎样 |
|---|---|---|
| Node.js | Appium Server的运行环境 | 无法启动Appium服务 |
| JDK | UiAutomator2 driver编译与构建需要 | 安装driver报错、session创建失败 |
| Android SDK | 提供adb、模拟器、系统平台文件 | 找不到设备、无法安装APK |
| Appium Server | 接收指令、转发指令 | 客户端没地方连接 |
| UiAutomator2 Driver | 在Android设备上执行具体操作 | 创建session直接报错 |
| Appium Inspector | 可视化查看元素、调试capabilities | 只能写代码,排查问题效率低 |
1.2 Appium 1.x和2.x的差别,为什么你该按2.x来装
很多旧教程会告诉你“去下载Appium Desktop,里面包含Server和Inspector”,这是因为在Appium 1.x时代,官方把Server和Inspector打包在一个GUI工具里,确实是双击就能用。但Appium 2.0发布之后,官方把两者拆开了:Appium Server变成了纯命令行工具,通过npm安装;Appium Inspector则单独作为桌面客户端分发。
这个变化对新手来说其实是个好事——组件职责更明晰了,配置也更透明。但同时意味着,如果你还在网上找“Appium Desktop下载”,找出来的多半是已经停更的旧版,装上之后虽然也能打开,但和现在主流的driver机制、配置方式已经不兼容了。
下面所有步骤,我都会基于“命令行Appium Server + 独立Appium Inspector”这个组合来教,这是当前最推荐、也最不容易出问题的安装方式。
2. 环境准备里的第一关:JDK和Node.js,先装谁有讲究
2.1 JDK版本怎么选,下载哪个安装包
JDK是Java开发工具包,Appium的UiAutomator2 driver在运行时要调用Java环境来构建和编译Android测试代码。很多教程会让你直接装最新的Java 21,我建议别这么干。真实项目里,Gradle、Android Gradle Plugin老版本对高版本JDK兼容性参差不齐,才装完就报“Unsupported class file major version”的案例太多了。稳妥的做法是装JDK 8或者JDK 11,这两个版本在Appium生态里久经考验,出问题最少。
到Oracle官网找到Java 8或JDK 11的Windows x64版本,下载.msi安装包。需要注意,如果你在官网看到一堆版本号不用慌,认准“Windows x64 Installer”这种后缀就行。安装路径我建议用默认路径,尽量不要把JDK装到带空格或中文的目录里,比如“C:\Program Files\Java\jdk-11”,这类路径后续配环境变量时容易引进很多不必要的麻烦。
2.2 JAVA_HOME和PATH配置,这部分最容易错
JDK安装完成后,并不意味着就可以直接使用了,你还要告诉Windows系统Java装在哪里。右键“此电脑” →“属性”→“高级系统设置”→“环境变量”,在弹出的窗口里做两步操作。
第一步,在“系统变量”区域点击“新建”,变量名填JAVA_HOME,变量值填你JDK的实际安装根目录,比如C:\Program Files\Java\jdk-11。注意这个值一定不要带\bin后缀,bin目录是后面由PATH拼接的。
第二步,找到系统变量里的Path,双击打开,点击“新建”,新增一行%JAVA_HOME%\bin,然后一路点“确定”保存。比较关键的一点是,%JAVA_HOME%\bin最好放在Path列表比较靠前的位置,避免系统先找到了其他第三方软件捆绑的Java版本。如果以前装过其他版本JDK,这个问题更要注意。
配置完之后,重新打开一个CMD窗口,输入java -version,如果出现类似下面这样,就说明JDK配置成功了:
java version "11.0.16" Java(TM) SE Runtime Environment (build 11.0.16+8) Java HotSpot(TM) 64-Bit Server VM (build 11.0.16+8, mixed mode)要是提示“java不是内部或外部命令”,先别急着重装,绝大多数情况是环境变量没生效:CMD窗口要重新打开,或者直接重启一次电脑再看。
2.3 Node.js用LTS版本,顺便把npm镜像换掉
Appium Server本质是一个Node.js程序,所以安装Node.js是必须的一步。Node.js同样去官网下载,认准LTS版本即可,LTS意味着长期维护、生态兼容性最好,当前版本号大概是20.x或者22.x。下载Windows Installer(.msi)文件,双击一路Next就行。这里提醒一句,不要为了尝鲜特意去下Current最新版,某些npm依赖在太新的Node版本上还没适配完,装Appium时反而会出幺蛾子。
Node.js装完后,CMD里分别输入node -v和npm -v验证,能打印出版本号就没问题。接下来我们顺手做一件事:把npm的默认下载源切换到国内镜像。不换源的话,后面安装Appium时下载依赖包会慢到怀疑人生,甚至直接超时失败。
在CMD里执行:
npm config set registry https://registry.npmmirror.com执行完成后可以再跑一句npm config get registry,确认输出的是上面这个地址就对了。这一步不是什么歪门邪道,就是一个正常的公共镜像源配置,很多年都没变过,新手照着做不会有风险。
3. Android SDK和adb:Appium连接设备的那座桥
3.1 只装一个“命令行工具”,其他组件用命令补齐
如果你没有安装Android Studio,也不需要为了跑Appium去下载好几个G的完整IDE,官方提供了轻量级的命令行工具(commandlinetools),下载后就能用命令行安装SDK的各组件。强烈建议用这种方式,我自己的测试机就是这么配出来的,干净、且可控。
下载Windows版本的commandlinetools压缩包,解压出来是一个cmdline-tools文件夹。这里有个容易踩的坑:直接把这个文件夹里的内容平铺放到Android SDK目录下,sdkmanager会不识别。正确做法是,先创建一个你想作为SDK根目录的文件夹,比如D:\Android\Sdk,然后在里面建一个cmdline-tools文件夹,再在cmdline-tools下建一个latest文件夹,最后把解压出来的bin、lib等文件全部放进去。最终目录结构是这样的:
D:\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat很多教程没强调过这个“latest”目录层级,导致新手在“sdkmanager不是内部或外部命令”这个报错上折腾半天。我当时也在此徘徊了几天。
3.2 用sdkmanager安装platform-tools等核心组件
在CMD里,进入sdkmanager所在目录,先执行下面几条命令安装最核心的组件:
D:\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat --list这条命令会列出所有可安装的SDK组件,第一次运行可能会比较慢。确认命令能正常运行后,接着安装我们要用的东西:
D:\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat "platform-tools" "emulator" "platforms;android-33" "build-tools;33.0.2"安装过程中会提示是否接受许可协议,输入y回车即可。这几个组件的作用分别是:platform-tools负责提供adb.exe,emulator是Android模拟器,platforms是某个API级别的系统平台文件,build-tools是各编译工具。如果你打算后面用更高API级别的模拟器,比如Android 14,就把platforms;android-34也补上,命令支持一次装多个。
3.3 ANDROID_HOME和PATH怎么配,验证adb是关键
SDK组件装完之后,环境变量同样不能少。在系统环境变量里新建一个ANDROID_HOME,变量值填你刚才的SDK根目录,比如D:\Android\Sdk。然后在Path里新增三行:
%ANDROID_HOME%\platform-tools %ANDROID_HOME%\emulator %ANDROID_HOME%\cmdline-tools\latest\bin保存后重开CMD,输入adb --version,能打印出版本信息说明adb已经进入系统PATH了。如果提示找不到adb,基本就是Path配置出错了,回去检查一下路径是否真实存在、环境变量是不是没保存成功。
这一步为什么重要?因为Appium Server启动后,要执行“找到设备→安装App→发起自动化会话”这一整套动作,全部要通过adb来完成。adb连不上设备,后面一切免谈。很多人的Appium报错信息里翻来覆去出现“Could not find adb”或“device not found”,根子就在这个环节。
3.4 手机/模拟器连接前的准备:开发者模式与USB调试
如果是用真机调试,需要先进入“设置”→“关于手机”,连续点击“版本号”7次,开启开发者模式,然后在“开发者选项”里打开“USB调试”。用数据线连接电脑后,手机会弹出“允许USB调试吗”的授权窗口,记得勾选“一律允许”,否则adb一直处于unauthorized状态。
如果是用模拟器,相对简单,启动模拟器后,直接在CMD里执行adb devices,能看到类似下面的输出就说明设备已经就绪:
List of devices attached emulator-5554 device这里要注意,某些国产模拟器自带的adb版本和官方SDK里的adb版本不一致,会导致adb devices能看到设备但状态显示offline,或者干脆报adb server version doesn't match。这种时候,杀掉所有模拟器进程,把模拟器安装目录下较旧的adb.exe用SDK里的新版替换掉,然后再重启模拟器,问题一般能解决。
4. 安装Appium Server和Appium Inspector:这步很多人做错
4.1 用npm安装Appium,一条命令的事
Node.js和npm都就绪后,安装Appium Server就只是一个命令的事了。打开CMD,执行:
npm install -g appium加-g表示全局安装,这样在任意目录都能使用appium命令。安装过程取决于网络状况,如果前面配好了npmmirror镜像,一般一两分钟就能装完。安装完成后,执行:
appium --version能打印出版本号就说明Appium Server本体安装成功了。走到这里,你已经拥有了一个可运行的Appium服务端,只是它目前还不知道怎么操作Android设备。
4.2 安装UiAutomator2 Driver,没它创建不了会话
Appium 2.x版本把driver机制独立出来了,也就是说,你想连Android设备,就必须先安装对应的driver。Android平台的官方自动化driver就是UiAutomator2。执行下面这条命令:
appium driver install uiautomator2安装完成后,可以用appium driver list查看已安装的driver列表,看到uiautomator2出现在列表里就对了。这一步经常有人漏掉,然后连接设备时疯狂报错“Could not find a driver for automationName 'UiAutomator2'”,实际上就是driver没装。
如果执行driver install时卡住或者下载失败,多试几次,或者确认npm镜像配置是否生效。目前uiautomator2 driver本身也依赖一些Java组件来构建测试APK,所以前面JDK环境的必要性在这里就体现出来了。
4.3 Appium Inspector的下载与安装
Appium Inspector是官方推出的可视化客户端,用来连接Appium Server并查看设备页面上的元素树,这是我们调试自动化用例最顺手的工具。它已经不再捆绑在Appium Server里,而是作为一个独立桌面程序发布,最新版本的Windows安装包可以从Appium官网提供下载入口、或在GitHub的Releases页面找到,文件一般是exe格式,下载后直接双击安装即可。
安装完成后打开Appium Inspector,会看到一个配置界面,通常长这样:
Remote Host: 127.0.0.1 Port: 4723 Path: /这三项是连接Appium Server用的,保持默认一般没问题。稍微展开说下Path这个问题:很多旧教程会让你填/wd/hub,这其实是Appium 1.x时代的寻址路径,Appium 2.x默认已经不启用了。如果你用的是Appium 2.x,默认Path填/;如果你非要沿用旧习惯,启动server时加个参数appium --base-path /wd/hub,倒也能兼容。新手我建议直接用默认的/,少折腾一层。
4.4 准备JSON Capabilities,别让配置环节成为拦路虎
Inspector连接设备前,还要提供一份JSON格式的desired capabilities,用来告诉Appium“你要连什么平台、什么设备、用什么方式自动化”。以一台API 33的Android模拟器为例,最简配置是下面这样:
{ "platformName": "Android", "appium:platformVersion": "13.0", "appium:deviceName": "emulator-5554", "appium:automationName": "UiAutomator2" }各字段含义依次解释清楚。platformName固定写“Android”;appium:platformVersion是Android系统的版本号,比如Android 13就填13.0,具体以设备“关于手机”里显示为准;appium:deviceName填设备序列号,就是adb devices里显示的那一串,比如emulator-5554;appium:automationName固定写“UiAutomator2”,与刚安装的driver保持一致。
如果只想先看设备当前界面,不特意打开某个App,上面这些字段就够了。如果希望在会话建立时自动启动某个应用,那还要加上appium:appPackage和appium:appActivity。比如想启动模拟器自带的设置应用:
{ "platformName": "Android", "appium:platformVersion": "13.0", "appium:deviceName": "emulator-5554", "appium:automationName": "UiAutomator2", "appium:appPackage": "com.android.settings", "appium:appActivity": "com.android.settings.Settings" }appPackage是应用包名,appActivity是需要启动的Activity页面路径,这两个值可以直接在设备上通过一些命令行工具查,或者直接问开发。对初学阶段来说,用系统设置App练手非常方便,不用去下载测试APK。
5. 跑通第一个自动化会话,完整流程走一遍
5.1 启动Appium Server,确认监听正常
在CMD里执行:
appium看到日志出现listening on 0.0.0.0:4723类似的字样,说明Server已经启动并监听在4723端口了。这时候无论如何都不要关掉这个CMD窗口,它就是你在测试期间的“服务端后台”。如果4723端口被占用——比如你开了其他监控服务,或者残留了旧Appium进程——启动日志会直接报错,解决办法是找到占用端口的进程并结束它,或者修改Appium监听端口,用appium --port 4724指定新端口。
5.2 在Appium Inspector里发起连接
保证两步同时就绪:第一步,模拟器或真机处于可用状态,adb devices能列出设备且状态为device;第二步,Appium Server在CMD里正常运行。然后在Inspector的配置界面,填入与上面示例相一致的capabilities,点击“Start Session”按钮,耐心等待几秒钟。
如果一切正常,Inspector的主界面会弹出设备的实时屏幕画面,并且左侧会出现当前页面的元素层级树,点击任意元素还能看到它的resource-id、text、class等属性。看到这个画面,说明Appium下载安装配置这条链路已经完整打通了,后续写自动化脚本就是基于这些元素定位器来操作。
设备页面在Inspector里显示每一秒的加载情况,都依赖于adb截图能力和driver的解析能力,所以第一次加载比想象中慢一点是正常的,多半不是故障。
5.3 常见报错按这个顺序排查,少走弯路
第一次连接很少是一次成功的,我把这个环节最常见的报错现象、原因、解决办法整理成了一张表,方便你对照排查:
| 报错现象 | 根本原因 | 解决办法 |
|---|---|---|
| Could not find a driver for automationName 'UiAutomator2' | 没安装uiautomator2 driver | 执行appium driver install uiautomator2 |
| Could not find 'adb.exe' / ANDROID_HOME not set | 环境变量配置不对 | 确认ANDROID_HOME指向SDK根目录,Path含platform-tools |
| adb server version doesn't match | 第三方模拟器携带旧adb | 替换模拟器目录里的adb为SDK版本 |
| Bad response from '.../status' / 404 | Appium 2.x的Path填了旧地址 | 把Path改为/ |
| Failed to create session, instrument didn't report matched activity | appActivity填写错误 | 用正确的包名和Activity名,或用带app的APK |
| 端口4723被占用 | 服务被其他进程占用 | 结束占用进程,或用--port换端口 |
这个排查链路其实有一个固定的先后逻辑:先确认Server起来了没有,再确认设备被adb识别到了没有,接着确认driver装了没有,最后检查capabilities写得对不对。按这个顺序查,一般五分钟内能定位到问题。
6. 安装配置里常见的坑,我帮你一次性列完
6.1 环境变量改了不生效?不是Windows的锅,是你没刷新
很多人配完JAVA_HOME、ANDROID_HOME后,发现命令还是提示找不到,第一反应是配错了。大多数情况下,问题出在CMD窗口是配置前就打开的,它读取的还是旧的环境变量。解决办法是关掉CMD重开,或者注销一次Windows用户。如果重开还不行,那就是Path里填的路径写错了,特别容易把%JAVA_HOME%\bin写成\bin\之类多余的反斜杠,或者值里保留了两个连续空格。仔细检查一遍就明白了。
6.2 版本混用是最隐蔽的坑
Appium生态在1.x到2.x过渡时,很多配置习惯都变了。比如1.x时代driver是内置在Server里的,2.x要单独install;1.x的client库和2.x的w3c协议兼容性也有差异。我见过有人用1.x的Appium Desktop、旧版本client库、再加上2.x的driver配置,折腾一整天都在排查环境问题,最后换了Appium 2.x全家桶,十分钟搞定。
结论就是,安装的时候尽量保持全家桶版本一致:Appium Server用2.x,Inspector用最新版,driver用最新的uiautomator2,Java客户端库选对应Appium 2.x配套版本。这样能避开绝大多数学来的老教程问题。
6.3 npm或driver安装慢,换个源就省心
npm默认源在海外,国内网络环境下下载Appium很容易超时。配置npm的国内镜像源,具体命令我在前面已经给过了,不再重复。driver安装时如果遇到网络波动导致失败,同样可以多试几次。网速不稳定时,我建议整个安装过程不要去看视频或者大流量下载,避免和npm、driver下载抢带宽。
6.4 模拟器或者真机的连接问题,记好这招
adb devices看到设备状态是unauthorized的,优先看手机端的授权弹窗,取消勾选或重新插拔数据线都能触发新弹窗;设备状态是offline的,优先考虑adb版本不一致,执行adb kill-server && adb start-server重启adb试试,这招对模拟器尤其管用。
如果你用的是Android Studio官方AVD模拟器,启动时提示“Haxm/Android Emulator hypervisor driver is not installed”之类的,意味着电脑虚拟化技术(VT)没有开启,这个问题不只是Appium的问题,而是模拟器通用故障,需要到BIOS里把Intel VT-x或者AMD SVM开启,然后再启动模拟器。虚拟机里跑Android模拟器更容易遇到这个问题,我在实测中把模拟器安装到普通物理机后,一切恢复正常。
6.5 自动化测试工程里,还经常遇到这些配套工具
Appium环境搭完整只是起点,真正开始写自动化用例时,还会牵出一堆配套工具。比如用Java工程写用例,一般会引入Maven做依赖管理,这就是为什么很多教程会同时教你“Maven下载安装与配置”;再比如接口测试或测试数据清理环节,Redis缓存查看、Navicat数据库连接都是测试工作中高频使用的工具。
以Maven为例,它的安装配置和JDK逻辑几乎一样:解压到本地目录,配置MAVEN_HOME环境变量,把%MAVEN_HOME%\bin加入Path,CMD输入mvn -v验证。这套思路一旦熟练,以后装Gradle、装Tomcat都能举一反三。
在这些工具安装时保持与Appium环境相互独立,不要随便改Appium已经用到的Java、Node版本,否则容易引起连锁问题。举个例子,装Maven时如果你顺手装了新版本JDK并改动了JAVA_HOME,那么Appium的UiAutomator2 driver下次构建时可能就会出现IDE版本不兼容的报错。
最后再分享一个很实用的习惯:把这一整套安装过程中的关键命令整理成一个批处理脚本或者笔记,换新电脑、新同事入职时,照着跑一遍就能快速重建环境,远比自己一个个点安装包高效。我自己的安装命令都放在一个install_appium_env.bat里,几行命令覆盖npm换源、Appium安装、driver安装三个环节,剩下的JDK和Android SDK安装本身就是GUI操作,花不了几分钟。搭建环境是自动化测试路上的第一道坎,迈过去之后,Appium这边基本就有了一条清晰的路。