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

Appium Service Builder启动服务失败,手动启动正常求解决方案

问题描述

手动执行终端命令appium --use-plugins execute-driver可正常启动Appium服务器,但通过Java代码的Appium Service Builder启动时遇到两个问题:

  • 添加withArgument(() ->"--use-plugins", "execute-driver")参数时,报错「Unrecognized arguments: --plugins execute-driver」
  • 移除该参数后,又报错「Appium spawn npm ENOENT」

原代码如下:

AppiumDriverLocalService service = new AppiumServiceBuilder()
.usingDriverExecutable(new File("//Users//ABC//.nvm//versions//node//v19.2.0//bin//node"))
.withAppiumJS(new File("//Users//ABC//.nvm//versions//node//v19.2.0//lib/node_modules//appium//build//lib//main.js"))
.withArgument(() ->"--use-plugins", "execute-driver")
.withIPAddress("127.0.0.1").usingPort(4723).build();
        
service.start();
        
UiAutomator2Options options = new UiAutomator2Options();
options.setDeviceName("sampleDevice");
options.setApp("//Users//ABC//Documents//appiumSampleProject//src//test//java//resources//Demos-debug.apk");

AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723"),options);
解决办法

1. 修正插件参数传递方式

Appium Service Builder要求用GeneralServerFlag.USE_PLUGINS枚举传递插件参数,而非直接写字符串参数,这是导致第一个错误的核心原因。

2. 解决npm路径缺失问题

「Appium spawn npm ENOENT」错误是因为Appium无法找到npm可执行文件,需要显式指定npm路径或确保其在系统环境变量中。

修正后的完整代码

import io.appium.java_service.local.AppiumDriverLocalService;
import io.appium.java_service.local.AppiumServiceBuilder;
import io.appium.java_service.local.flags.GeneralServerFlag;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

public class AppiumServiceFix {
    public static void main(String[] args) throws MalformedURLException {
        // 配置npm可执行文件路径(根据你的nvm实际路径调整)
        File npmExecutable = new File("//Users//ABC//.nvm//versions//node//v19.2.0//bin//npm");

        AppiumDriverLocalService service = new AppiumServiceBuilder()
                .usingDriverExecutable(new File("//Users//ABC//.nvm//versions//node//v19.2.0//bin//node"))
                .withAppiumJS(new File("//Users//ABC//.nvm//versions//node//v19.2.0//lib/node_modules//appium//build//lib//main.js"))
                // 使用枚举传递插件参数
                .withArgument(GeneralServerFlag.USE_PLUGINS, "execute-driver")
                .withIPAddress("127.0.0.1")
                .usingPort(4723)
                // 将npm所在目录加入环境变量,解决ENOENT错误
                .withEnvironment("PATH", System.getenv("PATH") + ":" + npmExecutable.getParent())
                .build();
        
        service.start();
        
        UiAutomator2Options options = new UiAutomator2Options();
        options.setDeviceName("sampleDevice");
        options.setApp("//Users//ABC//Documents//appiumSampleProject//src//test//java//resources//Demos-debug.apk");

        // 使用service.getUrl()替代硬编码URL,避免地址/端口不一致问题
        AndroidDriver driver = new AndroidDriver(service.getUrl(), options);
        
        // 后续测试逻辑...
        
        // driver.quit();
        // service.stop();
    }
}

额外注意事项

  • 确保execute-driver插件已安装:执行终端命令appium plugin install execute-driver
  • 部分Appium版本支持直接调用.withNpmExecutable(npmExecutable)方法指定npm路径,可替代环境变量配置
  • 启动服务后优先使用service.getUrl()获取连接地址,避免硬编码带来的潜在问题

内容的提问来源于stack exchange,提问作者bucky barns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:44