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

执行Appium框架时抛出java.lang.NoSuchMethodError问题求助

问题:Appium测试框架突然抛出NoSuchMethodError异常

上周(昨日)Appium测试框架运行完全正常,代码未做修改,Eclipse也未更新,但今日运行测试时抛出如下错误:

java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.(java.net.URI, java.time.Duration, java.time.Duration, org.openqa.selenium.remote.http.Filter, java.net.Proxy, org.openqa.selenium.Credentials)'
at io.appium.java_client.AppiumClientConfig.(AppiumClientConfig.java:62)
at io.appium.java_client.AppiumClientConfig.defaultConfig(AppiumClientConfig.java:79)
at io.appium.java_client.remote.AppiumCommandExecutor.(AppiumCommandExecutor.java:109)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:92)
at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:117)
at common.BaseConfigs.getDriver(BaseConfigs.java:38)
at com.netflix.XXXTests.setUp(XXXTests.java:93)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:62)
at org.testng.internal.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:385)
at org.testng.internal.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:321)
at org.testng.TestRunner.invokeTestConfigurations(TestRunner.java:637)
at org.testng.TestRunner.beforeRun(TestRunner.java:627)
at org.testng.TestRunner.run(TestRunner.java:589)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)
at org.testng.SuiteRunner.run(SuiteRunner.java:276)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)
at org.testng.TestNG.runSuites(TestNG.java:1063)
at org.testng.TestNG.run(TestNG.java:1031)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

getDriver方法代码如下:

public static AndroidDriver getDriver() throws IOException{
    //read data from data.properties file to get device name, app package name and app activity name
    Properties prop = new Properties();
    FileInputStream fis = new FileInputStream(System.getProperty("user.dir") + "\\src\\resources\\data.properties");
    prop.load(fis);
    
    String deviceName = prop.getProperty("deviceName");
    String appPackage = prop.getProperty("appPackage");
    String appActivity = prop.getProperty("appActivity");
            
    UiAutomator2Options options = new UiAutomator2Options();
    options.setDeviceName(deviceName);
    options.setAutomationName("uiautomator2");
    options.setAppPackage(appPackage);
    options.setAppActivity(appActivity);
    options.setPlatformName("Android");
    options.disableWindowAnimation();
    options.setNewCommandTimeout(Duration.ofSeconds(180));
    
    AndroidDriver driver = null;
    
    try {
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), options);
    } catch (Exception e) {
        System.err.println("Appium session could not be started. Please check if Appium server is running.");
        e.printStackTrace();
    }
    
    return driver;
}

已尝试的操作:

  • 在pom.xml中配置最新的Appium和Selenium版本
  • 尝试不同的Appium与Selenium版本组合
  • 更新OpenJDK至jdk-21并修改环境变量
  • 在Eclipse中设置JRE系统库执行环境为JavaSE-18(jdk-10-0.1.1)
  • 将Eclipse更新至2023-09(4.29.0)

目前陷入困境,请问下一步该如何处理?删除整个.m2目录重新下载依赖是否有效?


解决方案

这个错误核心是依赖版本冲突:Appium Java Client依赖的Selenium版本与项目实际加载的Selenium版本不匹配,导致找不到指定的ClientConfig构造方法。针对问题给出以下步骤:

  1. 清理Maven仓库并重新拉取依赖
    删除本地Maven仓库(默认路径为用户目录下的.m2/repository),执行mvn clean install -U强制更新依赖。这个操作能解决依赖缓存损坏、版本混乱的问题,是你提到的方案的核心,大概率有效。

  2. 排查依赖树,解决隐式版本冲突
    执行mvn dependency:tree命令,搜索org.seleniumhq.selenium相关依赖,检查是否有间接引入的低版本Selenium。如果存在,在对应的依赖中添加<exclusions>排除旧版Selenium,确保项目中只有一个统一版本的Selenium依赖。

  3. 统一JDK版本
    你当前混用了JDK 21和JavaSE-18执行环境,版本混乱可能导致类加载异常。建议统一使用JDK 11或17(这两个LTS版本与Appium、Selenium的兼容性最佳),在Eclipse中设置JRE系统库为对应版本的JDK。

  4. 匹配Appium Server与Java Client版本
    确保本地Appium Server版本和Java Client版本兼容:比如Appium Server 2.x需搭配Appium Java Client 8.x,避免旧版Server搭配新版Client的情况。

  5. 清理Eclipse缓存并同步依赖
    在Eclipse中执行Project -> Clean,右键项目选择Maven -> Update Project,勾选Force Update of Snapshots/Releases,强制同步依赖配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:08:22