运行Appium测试遇AndroidDriver初始化失败,请求排查故障
问题排查:Appium无法启动AndroidDriver会话(Chrome Web应用测试)
核心错误分析
Error initializing AndroidDriver: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
该错误本质是Appium无法与Android模拟器建立Chrome自动化会话,常见触发点包括ChromeDriver与Chrome版本不兼容、Desired Capabilities配置缺失、模拟器/ADB状态异常、Appium服务配置问题。
逐步排查与修复方案
1. 修复ChromeDriver路径配置错误
你的代码中误用了WebDriverManager.chromedriver().getBrowserPath(),该方法返回的是Chrome浏览器的路径,但Appium需要的是ChromeDriver驱动程序的路径。同时必须保证ChromeDriver版本与模拟器中Chrome浏览器版本完全匹配。
修正代码:
// Step 4: 配置对应版本的ChromeDriver WebDriverManager.chromedriver().setup(); // 获取ChromeDriver驱动路径,而非Chrome浏览器路径 caps.setCapability("chromeDriverExecutable", WebDriverManager.chromedriver().getDriverPath());
额外检查:
- 打开模拟器Chrome,通过「设置→关于Chrome」查看版本
- 若版本不匹配,可通过
WebDriverManager.chromedriver().version("具体版本号").setup()指定对应版本
2. 补充关键Desired Capabilities配置
现有配置缺少几个核心参数,导致Appium无法正确识别设备和启动会话:
platformVersion: 必须指定模拟器的Android系统版本(如"13"、"14")automationName: 显式指定UiAutomator2(Android Web测试的标准自动化引擎)noReset: 设置为true可避免每次测试重置Chrome状态,提升稳定性
修正后的capabilities代码:
// Step 3: 配置Android设备与Chrome的核心参数 DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("platformName", "Android"); caps.setCapability("platformVersion", "13"); // 替换为你的模拟器Android版本 caps.setCapability("deviceName", "emulator-5554"); caps.setCapability("browserName", "Chrome"); caps.setCapability("automationName", "UiAutomator2"); caps.setCapability("noReset", true);
3. 验证模拟器与ADB状态
- 执行
adb devices命令,确认emulator-5554处于device状态(而非offline) - 确保模拟器完全启动(加载完成,可正常打开Chrome)
- 若设备状态异常,执行
adb kill-server && adb start-server重置ADB服务
4. 优化Appium服务配置
- 检查端口4723是否被占用:Mac/Linux用
lsof -i :4723,Windows用netstat -ano | findstr :4723,若占用则更换端口或关闭占用进程 - 添加日志输出方便排查:
serviceBuilder.withLogFile(new File("appium_logs.txt")); // 生成Appium运行日志
5. 完整修正后的测试代码
package appiumbasics; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.service.local.AppiumDriverLocalService; import io.appium.java_client.service.local.AppiumServiceBuilder; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.Test; import java.io.File; import java.net.MalformedURLException; public class RunWebAppAndroid { @Test public void OpenWebAppInChrome() throws MalformedURLException { // Step 1: 配置带日志的Appium本地服务 AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder(); serviceBuilder.usingPort(4723) .withLogFile(new File("appium_logs.txt")); // Step 2: 启动Appium服务 AppiumDriverLocalService service = AppiumDriverLocalService.buildService(serviceBuilder); service.start(); // Step 3: 设置Android设备与Chrome的Desired Capabilities DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("platformName", "Android"); caps.setCapability("platformVersion", "13"); // 替换为你的模拟器Android版本 caps.setCapability("deviceName", "emulator-5554"); caps.setCapability("browserName", "Chrome"); caps.setCapability("automationName", "UiAutomator2"); caps.setCapability("noReset", true); // Step 4: 配置匹配版本的ChromeDriver WebDriverManager.chromedriver().setup(); caps.setCapability("chromeDriverExecutable", WebDriverManager.chromedriver().getDriverPath()); // Step 5: 初始化AndroidDriver并执行测试 AndroidDriver driver = null; try { driver = new AndroidDriver(service.getUrl(), caps); driver.get("http://example.com"); System.out.println("Web App已成功在模拟器Chrome中打开。"); // 可添加后续自动化步骤 // driver.findElement(...).click(); } catch (Exception e) { System.err.println("初始化AndroidDriver失败: " + e.getMessage()); e.printStackTrace(); // 打印完整堆栈信息,便于定位深层问题 } finally { if (driver != null) { driver.quit(); } service.stop(); } } }
额外排查技巧
- 查看
appium_logs.txt文件,里面会包含更详细的错误细节(如Chrome启动失败原因、版本不匹配提示) - 手动在模拟器中打开Chrome并访问目标URL,确认网络和浏览器本身无异常
内容的提问来源于stack exchange,提问作者Albear Mousa
相关产品推荐
相关产品推荐

