无法通过代码启动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路径和手动启动的不是同一个实例,或者驱动安装在全局位置但代码启动的服务未读取到。
解决步骤:
确认UIAutomator2驱动状态
打开命令行执行:appium driver list --installed如果未显示uiautomator2,执行安装命令:
appium driver install uiautomator2调整Appium服务启动配置
- 方法一:删除硬编码的appiumJS路径,让服务自动识别系统中的Appium实例(和手动启动的一致):
AppiumDriverLocalService service = new AppiumServiceBuilder() .withIPAddress("127.0.0.1") .usingPort(4723) .build(); - 方法二:如果必须指定appiumJS路径,进入该路径对应的Appium目录,执行
appium driver install uiautomator2,确保该实例已安装驱动。
- 方法一:删除硬编码的appiumJS路径,让服务自动识别系统中的Appium实例(和手动启动的一致):
推荐使用官方推荐的配置方式
用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
相关产品推荐
相关产品推荐

