Appium Java Eclipse环境下java.lang.ClassNotFoundException问题求助
解决Appium Java项目中
org.apache.commons.lang3.StringUtils找不到的问题 嗨,别着急,这个问题很常见,本质就是你的项目缺少了Apache Commons Lang3这个依赖包,导致JVM在运行时找不到需要的StringUtils类——从错误日志里的java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils就能直接定位到原因。
解决方案分两种情况:
1. 手动导入Jar包(适合非Maven/Gradle项目)
- 去Apache官方下载对应版本的
commons-lang3.jar(选稳定版本就行,比如3.12.0) - 打开Eclipse,右键你的项目 →
Build Path→Add External Archives... - 选中下载好的Jar包,添加到项目的构建路径里
- 最后清理项目(
Project→Clean...),重新运行代码就可以了
2. Maven项目添加依赖
如果你的项目是用Maven管理的,直接在pom.xml里添加以下依赖:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> <!-- 可替换为最新稳定版 --> </dependency>
添加完后右键项目 → Maven → Update Project,等待依赖下载完成后再运行代码。
补充说明
Appium Java Client内部依赖了Apache Commons Lang3库来处理字符串操作,所以这个依赖是必须的,之前没添加的话就会出现这类类找不到的错误。
原问题信息
错误日志:
Nov 29, 2019 6:37:48 PM io.appium.java_client.remote.AppiumCommandExecutor$1 lambda$0 INFO: Detected dialect: W3C Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at io.appium.java_client.internal.ElementMap.getElementClass(ElementMap.java:77) at io.appium.java_client.internal.JsonToMobileElementConverter.newRemoteWebElement(JsonToMobileElementConverter.java:67) at org.openqa.selenium.remote.internal.JsonToWebElementConverter.apply(JsonToWebElementConverter.java:55) at io.appium.java_client.internal.JsonToMobileElementConverter.apply(JsonToMobileElementConverter.java:61) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:561) 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.findElement(RemoteWebDriver.java:323) at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:61) at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:428) at io.appium.java_client.DefaultGenericMobileDriver.findElementByXPath(DefaultGenericMobileDriver.java:151) at io.appium.java_client.AppiumDriver.findElementByXPath(AppiumDriver.java:1) at io.appium.java_client.android.AndroidDriver.findElementByXPath(AndroidDriver.java:1) at DemoActualAutomation.main(DemoActualAutomation.java:15) Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source)
DemoActualAutomation.class代码:
import java.net.MalformedURLException; import java.util.concurrent.TimeUnit; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; public class DemoActualAutomation extends AppiumDemo { public static void main(String[] args) throws MalformedURLException { // TODO Auto-generated method stub AndroidDriver<AndroidElement> driver = Capabilities(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.findElementByXPath("//android.widget.TextView[@text='Preference']").click(); } }
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

