【问题标题】:Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/codec/w3c/W3CHttpCommandCodec线程“主”java.lang.NoClassDefFoundError 中的异常:org/openqa/selenium/remote/codec/w3c/W3CHttpCommandCodec
【发布时间】:2019-12-20 11:31:03
【问题描述】:

线程“main”中的异常 java.lang.NoClassDefFoundError: org/openqa/selenium/remote/codec/w3c/W3CHttpCommandCodec

嗨!我刚刚开始了移动自动化课程并尝试运行自动化测试,但我想在硒方面遇到了一些问题。这是因为依赖关系吗?我在 stackoverflow 上检查了类似的问题,但没有想出如何解决它。你能帮帮我吗?

这是我的代码:

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

import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;

public class base {

    public static AndroidDriver<AndroidElement> Capabilities() throws MalformedURLException {

        File appdir=new File("src");
        File app=new File(appdir,"ApiDemos-debug.apk");

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.DEVICE_NAME,"Emulator1");
        cap.setCapability(MobileCapabilityType.AUTOMATION_NAME,"uiautomator2");
        cap.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
        AndroidDriver<AndroidElement> driver=new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"),cap);
        return driver;
    }

这是我运行测试后看到的:

    авг 13, 2019 11:26:55 PM io.appium.java_client.remote.AppiumCommandExecutor$1 lambda$0
INFO: Detected dialect: W3C
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/codec/w3c/W3CHttpCommandCodec
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:262)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:41)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
    at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:323)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:37)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:86)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:96)
    at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:94)
    at base.Capabilities(base.java:22)
    at basics.main(basics.java:12)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 14 more

【问题讨论】:

标签: java selenium appium qa appium-android


【解决方案1】:

您正遭受Jar Hell 形式的困扰,原因是:

  1. Appium Java Client 7.0.0Selenium Java 3.141.59 作为其 transitive dependencies 的一部分
  2. 您明确声明 Selenium Java Client 3.12.0 为您的项目依赖项
  3. Java Classloading 选择了不匹配的 API 和依赖项的错误类 - 这就是您收到此错误的原因

解决方案是从您的项目依赖项/类路径中删除 Selenium Java Client 3.12.0,Maven 将自行解决所需的依赖项。

有关更多信息和示例项目,请参阅Appium - Code Examples - Java 文章。

【讨论】:

  • 在外部库中添加 commons-lang3-3.7 jar 并将 java-client 7.1.0 jar 更改为 7.0.0 后工作。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 2017-12-21
  • 2016-08-10
  • 1970-01-01
  • 2021-12-12
  • 2022-11-04
相关资源
最近更新 更多