Appium Java执行UI测试遇SessionNotCreatedException报错求助
检查Capability必填项是否完整且正确
哪怕APK能启动,缺少或错误的核心Capability会导致会话无法正常创建。必须确保包含以下关键配置:DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("platformName", "Android"); caps.setCapability("deviceName", "emulator-5554"); // 对应adb devices里的设备名 caps.setCapability("appPackage", "com.your.app.package"); // APK的包名 caps.setCapability("appActivity", "com.your.app.MainActivity"); // 启动页Activity caps.setCapability("automationName", "UiAutomator2"); // Appium 2.x必须指定可以用
aapt dump badging your.apk命令获取正确的appPackage和appActivity。确认Appium客户端与服务器版本兼容
Appium 2.x和旧版1.x的客户端依赖差异很大:- 若用Appium Server 2.x,Java客户端需使用
io.appium:java-client:8.x及以上版本 - 不要混用旧版客户端(如7.x)和Appium 2.x服务器,会导致会话请求格式不匹配
- 若用Appium Server 2.x,Java客户端需使用
检查会话请求的URL路径
Appium 2.x默认的会话请求路径是http://127.0.0.1:4723/,而旧版1.x是/wd/hub。如果代码里仍写旧路径,就会返回404:
错误写法:new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);正确写法(Appium 2.x):
new AppiumDriver(new URL("http://127.0.0.1:4723/"), caps);可以在Appium服务器启动日志里确认路径,日志会显示
REST http interface listener started on 0.0.0.0:4723,没有/wd/hub后缀。验证设备连接状态
执行adb devices确保设备在线且无授权问题。如果设备状态是unauthorized,需要在模拟器/真机上授权调试连接。分析Appium服务器日志的错误细节
服务器日志里会有会话创建失败的具体原因,比如:The desired capability 'appActivity' was not provided or was incorrect
这类日志能直接定位问题,不要只看客户端抛出的404异常,重点看服务器端的错误输出。排查网络拦截问题
关闭本地防火墙、代理软件,避免会话请求被拦截。有些代理会修改请求路径,导致Appium服务器无法识别。
内容的提问来源于stack exchange,提问作者TraFFy

