You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

连接Appium Server触发SessionNotCreated Exception(版本:2.15.0/9.4.0/Java21)

Appium SessionNotCreatedException 404错误排查与解决

问题场景

使用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配置错误等情况。

解决办法

  1. 修正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);
    
  2. 安装UiAutomator2驱动
    打开命令行执行以下命令,确保Appium Server 2.x所需的UiAutomator2驱动已安装:

    appium driver install uiautomator2
    
  3. 验证设备连接状态
    执行adb devices命令,确认目标设备9TKBQCPZUC5HJNHM处于在线状态。若设备未识别,需检查USB调试是否开启、ADB驱动是否正常安装。

  4. 确认appPackage和appActivity正确性
    打开目标应用(计算器),执行以下命令获取当前应用的包名和Activity:

    adb shell dumpsys window | findstr mCurrentFocus
    

    对比输出结果与代码中的appPackageappActivity配置,确保一致。

内容的提问来源于stack exchange,提问作者Sharathkumar Yuvaraj

火山引擎 最新活动