【问题标题】:ApacheHttpClient$Factory throwing java.lang.NoClassDefFoundError ExceptionApacheHttpClient$Factory 抛出 java.lang.NoClassDefFoundError 异常
【发布时间】:2020-01-16 21:10:58
【问题描述】:

我正在尝试通过 Appium 在 BrowserStack 上运行示例测试。所有代码都来自 BrowserStack 并使用他们的示例 .ipa 文件。以下是我收到的错误日志。

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/internal/ApacheHttpClient$Factory
at io.appium.java_client.remote.AppiumCommandExecutor.<init>(AppiumCommandExecutor.java:55)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:131)
at io.appium.java_client.ios.IOSDriver.<init>(IOSDriver.java:82)
at BrowserStackIOS.main(BrowserStackIOS.java:28)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.internal.ApacheHttpClient$Factory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 4 more

这是第 28 行引用的代码行

IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("http://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);

除此之外,我正在使用 maven。 我从 https://search.maven.org/search?q=g:io.appium%20AND%20a:java-client 获得了我的依赖项

来自https://selenium.dev/downloads/的绑定(用于java)

关于 Bindngs,我不确定我是否正确安装了它们。我提取了 zip 文件并将位于 libs 文件夹中的 .jar 文件添加到我的依赖项中。 这是截图https://prnt.sc/qoqwzf 这是 selenium/remote/internal 文件夹的截图https://prnt.sc/qoqxh8

注意事项: 以前从未使用过 maven,所以我将仅包含其他注释: 运行 mvn install -U 时我收到构建成功 当我尝试构建我的项目时,我只收到该错误。

我为尝试解决错误所做的工作: 我已使用 https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java/4.0.0-alpha-4 将所有 selenium 依赖项更新为 4.0.0-alpha-4

我尝试通过以下方式编辑我的 pom.xml: 添加网络驱动依赖

 <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>4.0.0-alpha-4</version>
        </dependency>

添加 Safari 网络驱动程序依赖项

       <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-safari-driver</artifactId>
            <version>4.0.0-alpha-4</version>
        </dependency>

补充说明: 我的 POM.xml 看起来与 https://search.maven.org/remotecontent?filepath=io/appium/java-client/7.3.0/java-client-7.3.0.pom 中给出的完全一样,还有一些额外的依赖项,我在上面已经提到过。

以下是我在主类中请求的导入

import java.net.URL;
import java.util.List;
import java.net.MalformedURLException;

import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;

import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;

我还根据我收到的错误将 maven 编译器源编辑为 7,由于编译器源 5 与我正在运行的不兼容,我要求我这样做。

<properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

以下是我编辑的 pom 的开头,不确定这是否是一个问题,但我想其他人会知道。

<modelVersion>4.0.0</modelVersion>
    <groupId>-</groupId>
    <artifactId>First</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>java-client</name>
    <description>Java client for Appium Mobile Webdriver</description>
    <url>http://appium.io</url>

如果需要任何其他信息,请告诉我。我目前正在调整我的环境,因此出现了各种错误并得到了解决。 这是唯一一个我无法真正理解的东西。

编辑: 我的 Appium 依赖是

 <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>4.1.2</version>
        </dependency>

我当前的所有依赖项

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.0.0-alpha-4</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>com.google.code.gson</groupId>
            </exclusion>
            <exclusion>
                <artifactId>htmlunit-driver</artifactId>
                <groupId>*</groupId>
            </exclusion>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>net.sourceforge.htmlunit</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-support</artifactId>
        <version>4.0.0-alpha-4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>4.0.0-alpha-4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-safari-driver</artifactId>
        <version>4.0.0-alpha-4</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>4.0.0-alpha-4</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
        <scope>compile</scope>
    </dependency>

已删除

org.apache.http 组件 httpclient 4.5.9 编译 已删除

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.2.12</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.9</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.8.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.26</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>4.1.2</version>
    </dependency>
    <!-- Thanks for using https://jar-download.com -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.10</version>
    </dependency>
</dependencies>

【问题讨论】:

  • Pom.xml中有Appium依赖吗?
  • 是的@Muzzamil 刚刚将其添加到问题正文中。
  • 你能用 7.1.0 代替 4.1.2 尝试 java-client 依赖,构建项目并尝试重新运行
  • 解决了这个问题。谢谢你。你能把它作为答案提交吗?
  • 是的。当然,我现在正在添加它。

标签: java maven selenium appium-ios browserstack


【解决方案1】:

这个问题的根本原因是Jar hell

selenium 4.0.0-alpha-4 的依赖依赖于 Appium Java Client 7.1.0.

由于您在 pom.xml 文件中声明的依赖项与 Appium Java 客户端的传递依赖项之间的冲突,您会遇到错误。如果您将 Appium Java Client 4.1.2 更改为 Appium Java Client 7.1.0 将解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多