【问题标题】:Exception in thread "main" java.lang.NoClassDefFoundError when running Appium using Java使用 Java 运行 Appium 时线程“main”java.lang.NoClassDefFoundError 中的异常
【发布时间】:2022-02-15 18:08:18
【问题描述】:

尝试使用 Appium (Java) 在 android 设备上自动化本机应用程序并遇到此错误:

线程“主”java.lang.NoClassDefFoundError 中的异常:org/openqa/selenium/remote/internal/JsonToWebElementConverter 在 wibu.main(wibu.java:21)

引起:java.lang.ClassNotFoundException:org.openqa.selenium.remote.internal.JsonToWebElementConverter 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 更多

这是我的代码:

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.net.MalformedURLException;
import java.net.URL;

public class wibu {

    public static void main(String[] args) throws MalformedURLException {

        DesiredCapabilities dc = new DesiredCapabilities();

        dc.setCapability(MobileCapabilityType.DEVICE_NAME, "emulator-5554");
        dc.setCapability("platformName", "android");
        dc.setCapability("appPackage", "com.facebook.katana");
        dc.setCapability("appActivity", "com.facebook.katana.LoginActivity");

        AndroidDriver<AndroidElement> ad = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"),dc);

        String facebook_username = "username";
        String facebook_password = "password";

        MobileElement el1 = (MobileElement) ad.findElementByAccessibilityId("Username");
        el1.sendKeys(facebook_username);
        MobileElement el2 = (MobileElement) ad.findElementByAccessibilityId("Password");
        el2.sendKeys(facebook_password);
        MobileElement el3 = (MobileElement) ad.findElementByAccessibilityId("Log In");
        el3.click();
        MobileElement el4 = (MobileElement) ad.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.Button[1]");
        el4.click();
        MobileElement el5 = (MobileElement) ad.findElementById("com.google.android.gms:id/credential_save_reject");
        el5.click();

    }
}

【问题讨论】:

  • 你的 appium java-client 版本是什么?你也有硒依赖吗?看看这个帖子stackoverflow.com/questions/69742325/…
  • 我正在使用 java-client 7.6.0 并查看您给定的页面,我应该使用 8.0.0 java-client,因为我使用的是 Selenium 4.1.0?
  • 是的,java客户端8应该和selenium 4一起使用。7.6.0不兼容。
  • 我尝试在包含 java-client 8.0.0 的情况下运行它,但发现另一个错误。我无法导入 MobileElement 类
  • 你救了我哈哈,程序正在运行。感谢您的帮助

标签: java appium


【解决方案1】:

所以最终,

原来的问题是 java-client 7.6.0 与 Selenium 4 不兼容。

为了使用 Selenium 4,appium 版本应该是 8+。

最新的appium-java客户端版本为8.0.0-beta2

https://mvnrepository.com/artifact/io.appium/java-client/8.0.0-beta2

从 Appium 7 迁移到 8

本指南中列出的重大更改列表:

https://github.com/appium/java-client/blob/master/docs/v7-to-v8-migration-guide.md

  • AndroidDriver&lt;AndroidElement&gt; 应该是 AndroidDriver
  • MobileElement 应该是 WebElement
  • findElementByAccessibilityId 应该是 findElement(AppiumBy.accessibilityId("...")) 等。

为了仔细检查,最近的 API 文档可在此处获得:

https://javadoc.io/doc/io.appium/java-client/latest/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多