连接Appium Server触发SessionNotCreated Exception(版本:2.15.0/9.4.0/Java21)
问题场景
使用Appium Server 2.15.0、Appium Java客户端9.4.0、Java 21版本进行移动端自动化测试时,执行代码出现SessionNotCreatedException错误,响应码404,提示请求资源未找到。
测试代码
import java.net.URI; import java.time.Duration; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.remote.MobileCapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; public class BaseTestForMobileAutomation { public static void main(String[] args) { // Create DesiredCapabilities instance DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName", "9TKBQCPZUC5HJNHM"); // Device ID from adb devices capabilities.setCapability("platformVersion", "13"); // Android version capabilities.setCapability("appPackage", "com.coloros.calculator"); // Your app package capabilities.setCapability("appActivity", "com.android.calculator2"); // Your app activity capabilities.setCapability("automationName", "UiAutomator2"); // Set automation engine capabilities.setCapability("newCommandTimeout", 30); // Set command timeout (30 seconds) // Initialize AndroidDriver AndroidDriver driver = null; try { driver = new AndroidDriver(new URI("http://127.0.0.1:4723/wd/hub").toURL(), capabilities); System.out.println("Appium session started successfully."); } catch (Exception e) { System.out.println("Error starting Appium session: " + e.getMessage()); e.printStackTrace(); } finally { // Ensure driver session is properly closed if (driver != null) { driver.quit(); System.out.println("Appium session closed."); } } } }
错误信息
启动Appium会话出错:无法启动新会话。响应码404。
消息:请求的资源未找到,或收到的请求使用了映射资源不支持的HTTP方法主机信息:主机:'DESKTOP-I3V29VC',IP:'192.168.0.109'
构建信息:版本:'4.31.0',修订版:'1ef9f18787*'
系统信息:os.name: 'Windows 10',os.arch: 'amd64',os.version: '10.0',java.version: '21.0.2'
驱动信息:io.appium.java_client.android.AndroidDriver命令:[null, newSession {capabilities=[Capabilities {appium:appActivity: com.android.calculator2, appium:appPackage: com.coloros.calculator, appium:automationName: UiAutomator2, appium:deviceName: 9TKBQCPZUC5HJNHM, appium:newCommandTimeout: 30, appium:platformVersion: 13, platformName: ANDROID}]}]
Capabilities {appium:appActivity: com.android.calculator2, appium:appPackage: com.coloros.calculator, appium:automationName: UiAutomator2, appium:deviceName: 9TKBQCPZUC5HJNHM, appium:newCommandTimeout: 30, appium:platformVersion: 13, platformName: ANDROID}
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主机信息:主机:'DESKTOP-I3V29VC',IP:'192.168.0.109'
构建信息:版本:'4.31.0',修订版:'1ef9f18787*'
系统信息:os.name: 'Windows 10',os.arch: 'amd64',os.version: '10.0',java.version: '21.0.2'
驱动信息:io.appium.java_client.android.AndroidDriver
命令:[null, newSession {capabilities=[Capabilities {appium:appActivity: com.android.calculator2, appium:appPackage: com.coloros.calculator, appium:automationName: UiAutomator2, appium:deviceName: 9TKBQCPZUC5HJNHM, appium:newCommandTimeout: 30, appium:platformVersion: 13, platformName: ANDROID}]}]
Capabilities {appium:appActivity: com.android.calculator2, appium:appPackage: com.coloros.calculator, appium:automationName: UiAutomator2, appium:deviceName: 9TKBQCPZUC5HJNHM, appium:newCommandTimeout: 30, appium:platformVersion: 13, platformName: ANDROID}at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:114)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:75)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:61)
at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:178)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:243)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:313)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:174)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:101)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:113)
at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:109)
at base.BaseTestForMobileAutomation.main(BaseTestForMobileAutomation.java:23)
原因分析
- 核心原因:Appium Server 2.x版本已移除旧版的
/wd/hub路径,代码中仍使用该路径发起请求,导致服务器返回404错误。 - 潜在辅助原因:可能存在UiAutomator2驱动未安装、设备未正常连接、appPackage/appActivity配置错误等情况。
解决办法
修正Appium连接URL
将代码中的连接地址从http://127.0.0.1:4723/wd/hub改为http://127.0.0.1:4723,修改后的代码片段:driver = new AndroidDriver(new URI("http://127.0.0.1:4723").toURL(), capabilities);安装UiAutomator2驱动
打开命令行执行以下命令,确保Appium Server 2.x所需的UiAutomator2驱动已安装:appium driver install uiautomator2验证设备连接状态
执行adb devices命令,确认目标设备9TKBQCPZUC5HJNHM处于在线状态。若设备未识别,需检查USB调试是否开启、ADB驱动是否正常安装。确认appPackage和appActivity正确性
打开目标应用(计算器),执行以下命令获取当前应用的包名和Activity:adb shell dumpsys window | findstr mCurrentFocus对比输出结果与代码中的
appPackage、appActivity配置,确保一致。
内容的提问来源于stack exchange,提问作者Sharathkumar Yuvaraj




