You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过代码启动Appium服务:找不到UIAutomator2驱动求助

问题描述

我编写了一段Java代码,尝试通过代码启动Appium服务并执行Android自动化测试,但运行时提示“找不到适配automationName 'UIAutomator2'和platformName 'ANDROID'的驱动”。手动启动Appium服务时,该代码可正常运行。以下是我的测试代码及完整错误日志:

测试代码

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.Test;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

public class AppiumBasics {

    @Test
    public void appiumTest() throws MalformedURLException {

        // 需要代码启动服务,执行操作后停止服务
        File appiumJS = new File("npm//node_modules//appium//build//lib//main.js");

        // 配置并启动Appium服务
        AppiumDriverLocalService service = new AppiumServiceBuilder()
                .withAppiumJS(appiumJS)
                .withIPAddress("127.0.0.1")
                .usingPort(4723)
                .build();

        service.start();

        // 定义UIAutomator2的DesiredCapabilities
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("appium:automationName", "UIAutomator2");
        capabilities.setCapability("appium:deviceName", "MobileAutomationMachine"); // 替换为你的设备名
        capabilities.setCapability("appium:app", "D://Appium//resources//ApiDemos-debug.apk");   // APK文件路径

        // 初始化Appium驱动
        AppiumDriver driver = new AndroidDriver(service.getUrl(), capabilities);
        // 自动化操作

        driver.quit();
        service.stop();
    }
}

错误日志

SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
[Appium] Welcome to Appium v2.12.1
[Appium] Non-default server args:
[Appium] { address: '127.0.0.1' }
[Appium] The autodetected Appium home path: C:\Users\ATHAR\.appium
[Appium] Appium REST http interface listener started on http://127.0.0.1:4723
[Appium] No drivers have been installed in C:\Users\ATHAR\.appium. Use the "appium driver" command to install the one(s) you want to use.
[Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.
[HTTP] --> GET /status {}
[AppiumDriver@996d] Calling AppiumDriver.getStatus() with args: []
[AppiumDriver@996d] Responding to client with driver.getStatus() result: {"ready":true,"message":"The server is ready to accept new connections","build":{"version":"2.12.1"}}
[HTTP] <-- GET /status 200 5 ms - 111 
[HTTP] Request idempotency key: 715bbf9f-a382-4c11-8da4-dcd6c7152f1d
[HTTP] --> POST /session {"capabilities":{"firstMatch":[{"appium:app":"D://Appium//resources//ApiDemos-debug.apk","appium:automationName":"UIAutomator2","appium:deviceName":"MobileAutomationMachine","platformName":"ANDROID"}]}}
[AppiumDriver@996d] Calling AppiumDriver.createSession() with args: [null,null,{"firstMatch":[{"appium:app":"D://Appium//resources//ApiDemos-debug.apk","appium:automationName":"UIAutomator2","appium:deviceName":"MobileAutomationMachine","platformName":"ANDROID"}]}]
[AppiumDriver@996d] Event 'newSessionRequested' logged at 1731433345127 (23:12:25 GMT+0530 (India Standard Time))
[Appium] Attempting to find matching driver for automationName 'UIAutomator2' and platformName 'ANDROID'
[AppiumDriver@996d] Event 'newSessionStarted' logged at 1731433345131 (23:12:25 GMT+0530 (India Standard Time))
**[AppiumDriver@996d] Encountered internal error running command: Error: Could not find a driver for automationName 'UIAutomator2' and platformName 'ANDROID'. Have you installed a driver that supports those capabilities? Run 'appium driver list --installed' to see.** (Lower-level error: Could not find installed driver to support given caps)
    at DriverConfig.findMatchingDriver 

org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: Could not find a driver for automationName 'UIAutomator2' and platformName 'ANDROID'. Have you installed a driver that supports those capabilities? Run 'appium driver list --installed' to see. (Lower-level error: Could not find installed driver to support given caps) 
Host info: host: 'DESKTOP-LGNE5KF', ip: '192.168.0.105'
Build info: version: '4.26.0', revision: '8ccf0219d7'
System info: os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '17.0.10'
Driver info: io.appium.java_client.android.AndroidDriver
Command: [null, newSession {capabilities=[Capabilities {appium:app: D://Appium//resources//ApiD..., appium:automationName: UIAutomator2, appium:deviceName: MobileAutomationMachine, platformName: ANDROID}]}]
Capabilities {appium:app: D://Appium//resources//ApiD..., appium:automationName: UIAutomator2, appium:deviceName: MobileAutomationMachine, platformName: ANDROID}
解决方案

从错误日志可以看出,代码启动的Appium服务无法找到已安装的UIAutomator2驱动,而手动启动正常的原因是:代码指定的Appium路径和手动启动的不是同一个实例,或者驱动安装在全局位置但代码启动的服务未读取到。

解决步骤:

  1. 确认UIAutomator2驱动状态
    打开命令行执行:

    appium driver list --installed
    

    如果未显示uiautomator2,执行安装命令:

    appium driver install uiautomator2
    
  2. 调整Appium服务启动配置

    • 方法一:删除硬编码的appiumJS路径,让服务自动识别系统中的Appium实例(和手动启动的一致):
      AppiumDriverLocalService service = new AppiumServiceBuilder()
              .withIPAddress("127.0.0.1")
              .usingPort(4723)
              .build();
      
    • 方法二:如果必须指定appiumJS路径,进入该路径对应的Appium目录,执行appium driver install uiautomator2,确保该实例已安装驱动。
  3. 推荐使用官方推荐的配置方式
    用UiAutomator2Options替代DesiredCapabilities,代码更简洁规范:

    UiAutomator2Options options = new UiAutomator2Options();
    options.setPlatformName("Android");
    options.setDeviceName("MobileAutomationMachine");
    options.setApp("D://Appium//resources//ApiDemos-debug.apk");
    
    // 初始化驱动时传入options
    AppiumDriver driver = new AndroidDriver(service.getUrl(), options);
    

内容的提问来源于stack exchange,提问作者ATHARVA HIWASE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:25:01