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

时间:2019-08-13 21:45:29

标签: java selenium appium qa appium-android

线程“ 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

1 个答案:

答案 0 :(得分: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文章。