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

将Appium从1.8.1升级到1.22.3后遇到三类技术问题求助

升级Appium至1.22.3后Windows应用自动化测试问题解决

背景

使用Appium桌面版结合Java代码做Windows应用自动化测试,已完成以下升级操作:

  • 下载并安装新版Node.js
  • 卸载旧版Appium,通过npm -g appium安装1.22.3版本
  • 更新WinAppDriver至v1.2.1
  • Appium Doctor检测无异常
  • 更新pom.xml中的依赖配置

启动服务代码

String user = System.getProperty("user.name");
AppiumDriverLocalService service = AppiumDriverLocalService.buildService(new
        AppiumServiceBuilder().usingDriverExecutable(new File(
        "C:\\Program Files\\nodejs\\node.exe")).withAppiumJS(new File(
        "C:\\Users\\" + user + "\\AppData\\Roaming\\npm\\node_modules\\appium\\build\\lib\\main.js")).
        withArgument(GeneralServerFlag.LOG_LEVEL, "warn").
        withIPAddress("127.0.0.1").usingAnyFreePort());
service.start();

启动应用代码

DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.setCapability("deviceName", "WindowsPC");
appCapabilities.setCapability("app", BIN_PATH + "CathWorksUI.exe"); // 示例路径:C:\\Cathworks\\bin\\CathWorksUI.exe
appCapabilities.setCapability("newCommandTimeout", 9000);
appCapabilities.setCapability("automationName", "Windows"); // Windows自动化需指定为Windows而非appium
appCapabilities.setCapability("platformName", "Windows");

appium = new WindowsDriver<WindowsElement>(service.getUrl(), appCapabilities);

遇到的问题及解决方案

问题1:启动服务抛出AppiumServerHasNotBeenStartedLocallyException

排查解决:

  1. 路径转义检查:Windows路径需用双反斜杠\\或正斜杠/,确保Node.js和Appium主文件路径无转义错误,避免服务找不到执行文件。
  2. 手动验证服务:命令行执行appium,确认服务能正常启动,排除Appium安装本身的问题。
  3. 权限与端口:以管理员身份运行测试代码;检查端口占用,依赖usingAnyFreePort()确保端口可用。
  4. 日志排查:添加日志打印服务状态和错误信息:
    if (!service.isRunning()) {
        System.out.println("服务启动失败,标准输出:" + service.getStdOut());
        System.out.println("错误日志:" + service.getStdErr());
    }
    

问题2:WindowsDriver实例化与声明处有错误提示

解决步骤:

  1. 依赖版本匹配:pom.xml中Appium Java Client版本需与Appium服务兼容(1.22.3推荐搭配Java Client 8.x版本,如8.5.1)。
  2. 正确导入包:
    import io.appium.java_client.windows.WindowsDriver;
    import io.appium.java_client.windows.WindowsElement;
    
  3. 规范泛型声明:将protected static WindowsDriver<?> appium;改为protected static WindowsDriver<WindowsElement> appium;,避免通配符导致的类型不匹配。
  4. 验证服务URL:打印service.getUrl()确认返回有效地址(格式应为http://127.0.0.1:端口号/wd/hub)。

问题3:findElementByAccessibilityId方法不被识别

解决方案:

Appium Java Client 8.x版本开始,旧的findElementByXXX系列方法已废弃,改用新定位方式:

  1. 使用AppiumBy工具类(推荐):
    import io.appium.java_client.AppiumBy;
    // 替换原有代码
    appium.findElement(AppiumBy.accessibilityId("element"));
    
  2. 兼容方案(不推荐):使用Selenium原生By类:
    import org.openqa.selenium.By;
    appium.findElement(By.accessibilityId("element"));
    

内容的提问来源于stack exchange,提问作者Itay Sasson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:24:09