已安装最新ChromeDriver与slf4j依赖,仍无法创建Appium驱动会话
Appium创建会话失败(SessionNotCreatedException 404)问题排查
问题描述
我是Appium新手,已安装最新版ChromeDriver(该版本曾解决他人同类问题),此前的slf4j相关错误已通过在pom中添加依赖解决,但目前仍无法创建Appium驱动会话,启动AndroidDriver时抛出SessionNotCreatedException(响应码404)。尝试过修改URL和移除"/wd/hud/",但问题仍未解决。
错误日志
Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 404. Message: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource Host info: host: 'MallSoft.local', ip: '2601:1c2:0:3680:0:0:0:8406%en0' Build info: version: '4.8.1', revision: '8ebccac989' System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.16', java.version: '1.8.0_301' Driver info: io.appium.java_client.android.AndroidDriver Command: [null, newSession {capabilities=[{appium:app=/Users/fieldemployee/IdeaProjects/FirstAppiumProject/src/main/resources/ApiDemos-debug.apk, appium:automationName=uiAutomator2, appium:deviceName=nexus_5, platformName=ANDROID, appium:udid=emulator-5554}], desiredCapabilities=Capabilities {app: /Users/fieldemployee/IdeaPr..., automationName: uiAutomator2, deviceName: nexus_5, platformName: ANDROID, udid: emulator-5554}}] Capabilities {app: /Users/fieldemployee/IdeaPr..., automationName: uiAutomator2, deviceName: nexus_5, platformName: ANDROID, udid: emulator-5554} at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:148) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at io.appium.java_client.remote.AppiumProtocolHandshake.createSession(AppiumProtocolHandshake.java:133) at io.appium.java_client.remote.AppiumProtocolHandshake.createSession(AppiumProtocolHandshake.java:102) at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:194) at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:262) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543) at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:229) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:157) at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:80) at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:92) at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:117) at CreateDriverSession.main(CreateDriverSession.java:25) Process finished with exit code 1
IntelliJ代码
import io.appium.java_client.AppiumDriver; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.remote.MobileCapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import java.io.File; import java.net.MalformedURLException; import java.net.URL; public class CreateDriverSession { public static void main(String[] args) throws MalformedURLException { DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "nexus_5"); caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiAutomator2"); caps.setCapability(MobileCapabilityType.UDID, "emulator-5554"); //for windows users String appUrl = "/Users/fieldemployee/IdeaProjects/FirstAppiumProject/src/main/resources/ApiDemos-debug.apk"; //System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" //+ File.separator + "resources" + File.separator + "ApiDemos-debug.apk"; caps.setCapability(MobileCapabilityType.APP, appUrl); URL url = new URL("http://0.0.0.0:4723/"); AppiumDriver driver = new AndroidDriver(url, caps); } }
Appium GUI输出
[HTTP] No route found for /wd/hud/session [HTTP] <-- POST /wd/hud/session 404 8 ms - 211 [HTTP] [HTTP] Request idempotency key: e718b60f-1d53-4e4b-8ebb-ddaf41d23b43 [HTTP] --> POST /session [HTTP] {"capabilities":{"firstMatch":[{}],"alwaysMatch":{"appium:app":"/Users/fieldemployee/IdeaProjects/FirstAppiumProject/src/main/resources/ApiDemos-debug.apk","appium:automationName":"uiAutomator2","appium:deviceName":"nexus_5","appium:udid":"emulator-5554","platformName":"android"}}}
解决办法
1. 修正Appium服务URL
从日志可见客户端发送了拼写错误的/wd/hud/session请求,同时Selenium 4.x默认使用W3C协议的/wd/hub/session端点,需将代码中的URL改为:
URL url = new URL("http://0.0.0.0:4723/wd/hub");
若使用Appium 2.x,也可直接用http://0.0.0.0:4723,但添加/wd/hub能更好兼容Selenium 4的默认行为。
2. 检查Appium驱动安装
确保uiAutomator2驱动已正确安装,终端执行:
appium driver list
若未显示uiautomator2,执行安装命令:
appium driver install uiautomator2
3. 验证设备与应用路径
- 执行
adb devices确认emulator-5554处于在线状态,模拟器正常启动。 - 改用动态路径获取APK,避免硬编码错误:
String appUrl = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "ApiDemos-debug.apk";
4. 版本兼容性检查
确保Appium Java Client版本与Selenium版本匹配(Selenium 4.8.1建议搭配Appium Java Client 8.5+),在pom.xml中更新依赖:
<dependency> <groupId>io.appium</groupId> <artifactId>java-client</artifactId> <version>8.6.0</version> </dependency>
内容的提问来源于stack exchange,提问作者MallSoft95
相关产品推荐
相关产品推荐

