当 运行 Appium 使用 Java 时线程 "main" java.lang.NoClassDefFoundError 出现异常
Exception in thread "main" java.lang.NoClassDefFoundError when running Appium using Java
尝试使用 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();
}
}
所以最终,
最初的问题是 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<AndroidElement>
应该是 AndroidDriver
MobileElement
应该是 WebElement
findElementByAccessibilityId
应该是findElement(AppiumBy.accessibilityId("..."))
,等等
对于 double-check,最近的 API 文档可在此处获得:
https://javadoc.io/doc/io.appium/java-client/latest/index.html
尝试使用 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();
}
}
所以最终,
最初的问题是 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<AndroidElement>
应该是AndroidDriver
MobileElement
应该是WebElement
findElementByAccessibilityId
应该是findElement(AppiumBy.accessibilityId("..."))
,等等
对于 double-check,最近的 API 文档可在此处获得:
https://javadoc.io/doc/io.appium/java-client/latest/index.html