Appium测试用例抛出异常求助:缺失javax.websocket相关类
解决Appium初始化时的
javax.websocket.DeploymentException缺失问题 你遇到的这个NoClassDefFoundError,本质是Appium Java Client依赖的WebSocket相关类未被正确引入。从错误栈能看出来,ListensToLogcatMessages类初始化时需要javax.websocket.DeploymentException,但你的项目里缺少这个类所在的Jar包,导致类加载失败。
问题根源
Appium Java Client从7.x版本开始,为了实现Logcat监听功能引入了WebSocket机制,这就需要额外的Java WebSocket API依赖。很多旧教程没有同步更新这部分内容,所以你按教程添加的Jar包里,并没有包含这些必要的依赖文件。
两种可行解决方案
方案1:补充WebSocket相关依赖Jar包
你需要下载并手动引入以下Jar包到Eclipse项目的Build Path中:
javax.websocket-api-1.1.jar:提供WebSocket核心API类tyrus-standalone-client-1.17.jar:WebSocket的客户端实现(也可以分开引入tyrus-client和tyrus-container-grizzly-client两个Jar包)
这些Jar包可以从Maven中央仓库获取稳定版本,下载后右键项目 → Build Path → Add External Archives添加即可。
方案2:降级Appium Java Client版本
如果不想额外添加依赖,可以把Appium Java Client降级到6.x版本(比如6.1.0)。这个版本的客户端还没有引入WebSocket依赖,和你参考的旧教程兼容性更好,能直接适配现有Jar包配置。
验证步骤
- 完成依赖调整后,右键你的Eclipse项目 →
Clean清理项目缓存 - 重新运行测试用例,应该就能成功初始化
AndroidDriver了
你的测试代码
import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.AppiumDriver; import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver; public class AppiumTest { public static void main(String[] args) { //Set the Desired Capabilities DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("deviceName", "SM-T211"); caps.setCapability("udid", "41022b138d311100"); //Give Device ID of your mobile phone caps.setCapability("platformName", "Android"); caps.setCapability(CapabilityType.VERSION, "4.4.2"); caps.setCapability("appPackage", "com.isinolsun.app"); caps.setCapability("appActivity", "com.isinolsun.app.activities.OnBoarderActivity"); caps.setCapability("noReset", "true"); //Instantiate Appium Driver try { AppiumDriver<MobileElement> driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"), caps); driver.closeApp(); } catch (MalformedURLException e) { System.out.println(e.getMessage()); } } }
报错信息
Exception in thread "main" java.lang.NoClassDefFoundError: javax/websocket/DeploymentException at io.appium.java_client.android.ListensToLogcatMessages.<clinit>(ListensToLogcatMessages.java:34) at com.appiumtest.firsttestscript.AppiumTest.main(AppiumTest.java:27) Caused by: java.lang.ClassNotFoundException: javax.websocket.DeploymentException 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) ... 2 more
内容的提问来源于stack exchange,提问作者Muhammad Danish Qureshi
相关产品推荐
相关产品推荐

