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

求助:如何使用Robot Framework+Appium实现Android多设备测试

解决Robot Framework + Appium多设备测试的启动问题

我来帮你排查这个多设备启动应用的问题~ 从你给出的代码来看,核心问题大概率出在Appium服务的启动配置或者Robot Framework中driver实例的使用方式上,下面分点给你梳理解决方案:

1. 先确保每个设备对应独立的Appium服务实例

Appium单实例只能绑定一个设备,所以必须为每个模拟器启动单独的服务,而且要避免端口冲突:

  • 打开两个命令行窗口,分别启动对应设备的Appium服务:
    • 针对emulator-5556的服务:
      appium -p 4723 -bp 4724 -U emulator-5556
      
    • 针对emulator-5554的服务:
      appium -p 4725 -bp 4726 -U emulator-5554
      
    这里的参数说明:
    • -p:指定Appium服务的端口(和你脚本里用的4723、4725对应上即可)
    • -bp:指定设备的bootstrap端口,这个必须每个设备唯一(默认是4724,所以第二个要改成4726这类不冲突的端口)
    • -U:绑定指定的设备UDID(模拟器的UDID就是emulator-xxxx,直接填就行)
  • 启动后可以用netstat -ano | findstr 4723(Windows)或者lsof -i :4723(Mac/Linux)检查端口是否正常监听。

2. 完善Robot Framework中的driver实例管理

你已经用${appium1}和${appium2}保存了两个driver,但要注意后续操作必须明确指定使用哪个driver,否则Robot会默认用最后创建的那个,导致所有操作都跑到一个设备上:

# 启动设备1的应用
${appium1}= Open Application  http://localhost:4723/wd/hub  
...  platformName=${PLATFORM_NAME}  
...  platformVersion=${PLATFORM_VERSION}  
...  deviceName=emulator-5556  
...  udid=emulator-5556  # 建议加上udid,避免deviceName识别偏差
...  appPackage=${appPackage}  
...  appActivity=${appActivity}

# 启动设备2的应用
${appium2}= Open Application  http://localhost:4725/wd/hub  
...  platformName=${PLATFORM_NAME}  
...  platformVersion=${PLATFORM_VERSION}  
...  deviceName=emulator-5554  
...  udid=emulator-5554  # 同上,加上udid更稳妥
...  appPackage=${appPackage}  
...  appActivity=${appActivity}

# 操作设备1时,要把driver对象作为第一个参数传入关键字
Input Text  ${appium1}  id=username_input  user1@test.com
Click Button  ${appium1}  id=login_btn

# 操作设备2时,同样指定对应的driver
Input Text  ${appium2}  id=username_input  user2@test.com
Click Button  ${appium2}  id=login_btn

3. 提前验证设备连接状态

在启动测试前,先确认两个模拟器都正常在线:

  • 打开命令行执行adb devices,输出里应该同时出现emulator-5556和emulator-5554,状态都是device
  • 如果有设备显示offline,可以尝试重启模拟器,或者执行adb kill-server再adb start-server重新连接设备

4. 排查常见的小坑

  • 确保两个模拟器的系统版本(platformVersion)和你脚本中配置的一致,避免版本不兼容导致启动失败
  • 如果应用已经在某个模拟器上运行,先手动关闭,或者在Open Application中加上noReset=true(根据你的测试需求调整)

按照上面的步骤调整后,应该就能在两个模拟器上分别启动应用了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:02