AndroidDriver连接真机App后无法执行操作,报UnreachableBrowserException错误
问题分析与解决方案
问题描述
使用Appium对安卓真机进行App测试时,AndroidDriver可成功连接并唤起设备上的App,但调用driver.findElement等方法时无响应,等待许久后抛出以下错误:
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
测试代码如下:
public class sampleTest { private AndroidDriver driver; @Before public void setUp() throws MalformedURLException { DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName","Zachary"); desiredCapabilities.setCapability("udid","88Y5T19B1793"); desiredCapabilities.setCapability("platformName","Android"); desiredCapabilities.setCapability("platformVersion","3.0.0"); desiredCapabilities.setCapability("appPackage","com.test.test"); desiredCapabilities.setCapability("appActivity","host.exp.exponent.MainActivity"); URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub"); driver = new AndroidDriver(remoteUrl, desiredCapabilities); // 此处设备上的App已被打开 } @Test public void SampleTest() { // 此处无任何反应 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.findElement(By.id("SignIn")).click(); } @After public void tearDown() { driver.quit(); } }
可能的原因及解决步骤
1. 版本兼容性问题
- 检查
platformVersion是否填错:Android 3.0是非常老旧的版本,大概率是误填,查看设备实际系统版本(设置-关于手机)并修正,比如改为13或14。 - 确保Appium版本适配设备系统,建议安装最新稳定版Appium,同时执行
appium driver install uiautomator2确保UiAutomator2驱动正常安装。
2. 元素定位方式错误
- 用Appium Inspector连接设备,确认
SignIn是不是元素的真实ID:- 针对Expo打包的App(从
appActivity可看出),元素ID可能不是直接的SignIn,尝试用accessibilityId或XPath定位:
或driver.findElement(By.accessibilityId("SignIn")).click();driver.findElement(By.xpath("//*[@text='SignIn']")).click();
- 针对Expo打包的App(从
3. 等待策略设置时机错误
- 把隐式等待移到
setUp方法中初始化driver之后,确保元素查找时已有等待策略:driver = new AndroidDriver(remoteUrl, desiredCapabilities); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
4. 设备或服务异常
- 检查设备是否开启USB调试、允许模拟位置等权限,且已授权当前电脑连接。
- 重启相关服务:执行
adb kill-server后再adb start-server,关闭Appium服务后重启,同时重启设备重新测试。 - 查看Appium日志,获取更详细的错误信息,定位是元素查找失败还是连接中断导致的问题。
5. Capability配置补充
- 添加
automationName配置,明确指定使用UiAutomator2驱动:desiredCapabilities.setCapability("automationName", "UiAutomator2");
调整后的示例代码
public class sampleTest { private AndroidDriver driver; @Before public void setUp() throws MalformedURLException { DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName","Zachary"); desiredCapabilities.setCapability("udid","88Y5T19B1793"); desiredCapabilities.setCapability("platformName","Android"); desiredCapabilities.setCapability("platformVersion","13"); // 替换为设备实际系统版本 desiredCapabilities.setCapability("appPackage","com.test.test"); desiredCapabilities.setCapability("appActivity","host.exp.exponent.MainActivity"); desiredCapabilities.setCapability("automationName", "UiAutomator2"); URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub"); driver = new AndroidDriver(remoteUrl, desiredCapabilities); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); } @Test public void SampleTest() { driver.findElement(By.accessibilityId("SignIn")).click(); } @After public void tearDown() { if (driver != null) { driver.quit(); } } }
内容的提问来源于stack exchange,提问作者YI LU
相关产品推荐
相关产品推荐

