You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kobiton设备农场运行Appium自动化测试时遇W3C会话异常

问题:Kobiton设备农场Appium测试抛出W3C会话支持异常

此前在Kobiton设备农场运行Appium自动化测试一切正常,近期突然抛出异常:Could not start a new session. Only W3C sessions are supported. Please make sure your server is up to date.,更换测试应用或设备后问题依旧,自动生成的RunApplication类未做修改。

错误日志

FAILED CONFIGURATION: @BeforeClass *RunApplication
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Only W3C sessions are supported. Please make sure your server is up to date. 
Host info: host: '', ip: '127.0.0.1'
Build info: version: '4.6.0', revision: '79f1c02ae20'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '12.6', java.version: '18.0.1.1'
Driver info: io.appium.java_client.android.AndroidDriver
Command: [null, newSession {capabilities=[{appium:app=kobiton-store:v528820, appium:captureScreenshots=true, appium:deviceGroup=KOBITON, appium:deviceName=Galaxy*, appium:deviceOrientation=portrait, platformName=ANDROID, appium:platformVersion=1*, appium:sessionDescription=, appium:sessionName=Automation test session}], desiredCapabilities=Capabilities {app: kobiton-store:v528820, captureScreenshots: true, deviceGroup: KOBITON, deviceName: Galaxy*, deviceOrientation: portrait, platformName: ANDROID, platformVersion: 1*, sessionDescription: , sessionName: Automation test session}}]
Capabilities {}
    at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:154)
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:180)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:541)
    at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:224)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:157)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:79)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:87)
    at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:116)
    at Testy.BaseConfiguration.AppiumAndroidDoctor.RunApplication(AppiumAndroidDoctor.java:42)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
    at org.testng.internal.invokers.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:69)
    at org.testng.internal.invokers.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:361)
    at org.testng.internal.invokers.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:296)
    at org.testng.internal.invokers.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:180)
    at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at org.testng.TestRunner.privateRun(TestRunner.java:806)
    at org.testng.TestRunner.run(TestRunner.java:601)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:433)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:427)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:387)
    at org.testng.SuiteRunner.run(SuiteRunner.java:330)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1256)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1176)
    at org.testng.TestNG.runSuites(TestNG.java:1099)
    at org.testng.TestNG.run(TestNG.java:1067)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

当前使用的Desired Capabilities代码

package Testy.BaseConfiguration;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.time.Duration;
import java.util.Properties;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeTest;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;


public class AppiumAndroidDoctor {

    public AndroidDriver driver;
    
    
    @BeforeClass
    public void RunApplication() throws IOException
    {
        
      String kobitonServerUrl = "myKobitonServerUrl";
        
        DesiredCapabilities capabilities = new DesiredCapabilities();
        
        capabilities.setCapability("sessionName", "Automation test session");
        capabilities.setCapability("sessionDescription", "");
        capabilities.setCapability("deviceOrientation", "portrait");
        capabilities.setCapability("captureScreenshots", true);
        capabilities.setCapability("app", "kobiton-store:v528820");        
        capabilities.setCapability("deviceGroup", "KOBITON");
        capabilities.setCapability("deviceName", "Galaxy*");
        capabilities.setCapability("platformVersion", "1*");
        capabilities.setCapability("platformName", "Android"); 
        
        driver = new AndroidDriver(new URL(kobitonServerUrl),capabilities); 
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
        
    }
    
    @AfterClass
    public void tearDown()
    {
        driver.quit();
    }
}

解决方案

问题核心是旧的DesiredCapabilities类不支持W3C标准会话格式,而Kobiton的Appium服务已升级为仅支持W3C会话,需按以下方式修改:

  1. 替换DesiredCapabilities为UiAutomator2Options
    代码已导入UiAutomator2Options,直接用它配置参数,自动生成符合W3C标准的会话请求。

  2. 修改后的代码示例

package Testy.BaseConfiguration;

import java.io.IOException;
import java.net.URL;
import java.time.Duration;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;


public class AppiumAndroidDoctor {

    public AndroidDriver driver;
    
    
    @BeforeClass
    public void RunApplication() throws IOException
    {
        
      String kobitonServerUrl = "myKobitonServerUrl";
        
        UiAutomator2Options options = new UiAutomator2Options();
        
        options.setCapability("sessionName", "Automation test session");
        options.setCapability("sessionDescription", "");
        options.setCapability("deviceOrientation", "portrait");
        options.setCapability("captureScreenshots", true);
        options.setCapability("app", "kobiton-store:v528820");        
        options.setCapability("deviceGroup", "KOBITON");
        options.setCapability("deviceName", "Galaxy*");
        options.setCapability("platformVersion", "1*");
        options.setPlatformName("Android"); 
        
        driver = new AndroidDriver(new URL(kobitonServerUrl), options); 
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
        
    }
    
    @AfterClass
    public void tearDown()
    {
        driver.quit();
    }
}
  1. 额外注意事项
    • 确保Appium Java客户端版本与Selenium 4.6.0兼容
    • Kobiton服务端已淘汰旧的JSON Wire协议会话,必须使用W3C标准请求格式

内容的提问来源于stack exchange,提问作者Krzysztof Potoczek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:45:29