java - 为什么我的 IDE 在错误的依赖文件夹中查找所需的类?

标签 java android selenium appium

我正在尝试运行一个在我更改主文件夹之前工作正常的脚本。 更改主文件夹后,我遇到了一些问题,但我能够解决它们。我唯一无法解决的是以下错误。

    Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/internal/JsonToWebElementConverter
    at BrowserStackAndroid.main(BrowserStackAndroid.java:43)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.internal.JsonToWebElementConverter
    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)
    ... 1 more

这是一个有趣的错误,经过一些研究,我无法理解它。

它正在搜索的类位于 org.selenium.remote 依赖项中。只不过它不在内部文件夹中,而是在远程文件夹中。 因此它正在搜索的类是 JsonToWebElementConverter。

该类位于以下路径 org/openqa/selenium/remote/JsonToWebElementConverter

IDE(或 Maven?)正在查找的文件夹是 组织/openqa/selenium/remote/internal 其中只有 WebElementToJsonConverter 类

我尝试通过 Maven 以多种不同的方式重新安装库,使用不同的依赖项等,但无法解决此问题。

我以前从未遇到过这样的问题,所以我很高兴看到解决方案是什么。

注意事项: 由于以下代码行而引发错误

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

这个项目之前工作得很好,但一旦我更改了项目的目录就停止工作了。

最佳答案

发生这种情况是因为您具有具有 2 个依赖项的相同类或库。只需删除基于 selenium 的依赖项即可解决该问题,因为所有 selenium 依赖项 已随 Appium java 客户端 附带。对于classpath,您可以查看 java docs

通过cmd设置类路径的方法(导航到项目根文件夹)

set CLASSPATH= target/org/openqa/selenium/remote/internal/JsonToWebElementConverter

注意:对于 maven 项目,所有已编译的 java 文件应位于 target 文件夹中。如果您遇到同样的问题,您可以在 classpath 中添加缺少的类,目标应该是 target 文件夹,如 java 文档中所述

关于java - 为什么我的 IDE 在错误的依赖文件夹中查找所需的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60023053/

相关文章:

android - Android View 中的橡皮擦

selenium - 自动化测试时是先写测试脚本再写测试用例还是相反?

python - 在 Python 中使用 Selenium 处理 "Accept Cookies"弹出窗口

java - 在android中的给定字符串数组中搜索子字符串

java - ReSTLet、GWT 和 session

android - 如何初始化 EditText 的二维数组?

android - 手机SSRS报告如何处理

javascript - 如何在 MAC 上使用 Protractor 与 Appium 和 IOS-Simulator 进行自动化测试

java - 使用 CXF 拦截器进行错误处理 - 更改响应消息

java - 如何使用 EXIF 保存拍摄图像