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

使用Selenium Grid实现安卓多设备并行执行时无法创建远程会话

看起来你在搭建Selenium Grid+Appium实现Android设备并行自动化时,遇到了Session创建失败的问题,我帮你梳理下几个关键问题点和对应的解决办法:

1. JSON节点配置的核心错误修正

你的JSON配置里有几个明显的错误,直接导致节点无法正确注册到Grid Hub,或者Session匹配失败:

  • capabilities部分:
    • platformName写成了Windows,完全不符合Android设备的配置,必须改成Android
    • browserName设置为Android是错误的,原生App测试不需要这个字段,直接删除即可(这个字段是给浏览器测试用的)
    • 补充automationName字段,确保和代码里使用的自动化引擎一致(比如uiautomator2)
  • configuration部分:
    • 多设备并行时,每个Appium节点的port必须唯一(比如Redmi用4723,Moto E用4724)
    • url要和当前节点的Appium服务地址一致,比如http://0.0.0.0:4723/wd/hub(端口要和port字段匹配)
    • 建议把proxy改成Appium专用的io.appium.java_client.remote.AppiumProxy,避免兼容性问题

修正后的Redmi节点JSON示例:

{
    "capabilities": [
        {
            "deviceName": "Redmi",
            "platformName": "Android",
            "platformVersion": "7.0",
            "automationName": "uiautomator2",
            "appPackage": "com.amhi.healthjinn",
            "appActivity": "com.amhi.healthjinn.MainActivity",
            "noReset": true,
            "maxInstances": 1
        }
    ],
    "configuration": {
        "cleanUpCycle": 2000,
        "timeout": 30000,
        "proxy": "io.appium.java_client.remote.AppiumProxy",
        "url": "http://0.0.0.0:4723/wd/hub",
        "host": "0.0.0.0",
        "port": 4723,
        "maxSession": 1,
        "register": true,
        "registerCycle": 5000,
        "hubPort": 4444,
        "hubHost": "127.0.0.1"
    }
}

Moto E的节点配置要把port改成4724,deviceName和platformVersion对应自己的设备,url改成http://0.0.0.0:4724/wd/hub。

2. TestNG XML的并行执行配置

你当前的TestNG XML只配置了单个测试用例,要实现并行执行,必须开启并行模式并设置线程数:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Parallel Mobile Tests" parallel="tests" thread-count="2">
    <test name="test_redmi">
        <parameter name="device" value="Redmi"/>
        <parameter name="version" value="7.0"/>
        <classes>
            <class name="Tests.LoginTest">
                <methods>
                    <include name="loginOTP"/>
                </methods>
            </class>
        </classes>
    </test>
    <test name="test_moto">
        <parameter name="device" value="Moto E"/>
        <parameter name="version" value="7.1.2"/>
        <classes>
            <class name="Tests.LoginTest">
                <methods>
                    <include name="loginOTP"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>
  • parallel="tests"表示按<test>标签并行执行
  • thread-count="2"表示同时运行2个线程,对应两台设备

3. 代码中的Capability与连接地址修正

你的setUp方法有两个关键问题:

  • 使用CapabilityType.VERSION设置系统版本是错误的,应该用Appium专属的MobileCapabilityType.PLATFORM_VERSION
  • 连接地址应该指向Grid Hub,而不是单个Appium节点!Grid会自动把请求分配到匹配的节点上

修正后的setUp方法片段:

import io.appium.java_client.remote.MobileCapabilityType;

@Parameters({"device","version"})
@BeforeTest(alwaysRun = true)
public static void setUp(String device,String version) throws MalformedURLException, InterruptedException {
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, device);
    cap.setCapability(MobileCapabilityType.NO_RESET, true);
    cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, version);
    cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, cfg.getAutomationName());
    cap.setCapability(MobileCapabilityType.APP_PACKAGE, cfg.getAppPackage());
    cap.setCapability(MobileCapabilityType.APP_ACTIVITY, cfg.getAppActivity());
    
    // 重点:这里的URL是Grid Hub的地址,不是单个Appium节点的地址
    driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub"), cap);
    System.out.println(driver);
}

4. 节点启动与Hub验证步骤

  • 先启动Selenium Grid Hub:运行命令java -jar selenium-server-standalone-xxx.jar -role hub(替换xxx为你的Selenium版本号)
  • 分别为两台设备启动Appium服务并加载对应配置:
    • Redmi设备:appium --nodeconfig redmi_node_config.json
    • Moto E设备:appium --nodeconfig moto_node_config.json -p 4724
  • 访问http://127.0.0.1:4444/grid/console,确认两个节点都成功注册到Hub

做完以上修正后,运行TestNG XML,应该就能看到两台设备同时执行测试用例了。如果还有问题,可以查看Appium和Grid Hub的日志,获取更详细的错误提示。

内容的提问来源于stack exchange,提问作者Abhishek Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:47:34