求助:如何使用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
相关产品推荐
相关产品推荐

