Appium自动化启动Android模拟器Chrome浏览器报错及白屏问题
Appium启动Android模拟器Chrome浏览器失败(白屏+超时错误)
问题现象
- Appium服务已正常运行
- Chrome浏览器能启动,但启动后显示空白白屏
- 代码运行抛出
SessionNotCreatedException错误,核心提示为Adb command timed out after 30 seconds
错误日志
SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: timeout: Adb command timed out after 30 seconds Host info: host: 'IN-HVKMHS3', ip: '192.168.29.3' Build info: version: '4.9.1', revision: 'eb2032df7f' System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_361' Driver info: io.appium.java_client.android.AndroidDriver Command: [null, newSession {capabilities=[{appium:automationName=UiAutomator2, browserName=Chrome, appium:chromedriverExecutableDir=C:\Users\gjsr\Downloads\Drivers, appium:device=Android, appium:deviceName=emulator-5554, platformName=ANDROID, appium:platformVersion=12}], desiredCapabilities=Capabilities {automationName: UiAutomator2, browserName: Chrome, chromedriverExecutableDir: C:\Users\gjsr\Downloads\Dri..., device: Android, deviceName: emulator-5554, platformName: ANDROID, platformVersion: 12}}] Capabilities {automationName: UiAutomator2, browserName: Chrome, chromedriverExecutableDir: C:\Users\gjsr\Downloads\Dri..., device: Android, deviceName: emulator-5554, platformName: ANDROID, platformVersion: 12} at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:136) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at io.appium.java_client.remote.AppiumProtocolHandshake.createSession(AppiumProtocolHandshake.java:133) at io.appium.java_client.remote.AppiumProtocolHandshake.createSession(AppiumProtocolHandshake.java:102) at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:194) at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:262) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543) at io.appium.java_client.AppiumDriver.startSession(AppiumDriver.java:229) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:157) at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:80) at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:92) at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:117) at ecolab.connect.base.BaseTest.main(BaseTest.java:45)
运行代码
package ecolab.connect.base; import java.net.MalformedURLException; import java.nio.charset.MalformedInputException; import java.util.concurrent.TimeUnit; import java.net.URL; import io.appium.java_client.AppiumDriver; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.options.UiAutomator2Options; import io.appium.java_client.remote.MobileBrowserType; import io.appium.java_client.remote.MobileCapabilityType; import io.appium.java_client.remote.MobilePlatform; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; public class BaseTest { public static AndroidDriver driver; public static void main(String[] args) throws MalformedURLException, InterruptedException { DesiredCapabilities capabilities=new DesiredCapabilities(); capabilities.setCapability("chromedriverExecutableDir","C:\\Users\\gjsr\\Downloads\\Drivers"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "Chrome"); capabilities.setCapability("device", "Android"); capabilities.setCapability("deviceName", "emulator-5554"); capabilities.setCapability("platformVersion","12"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("automationName", "UiAutomator2"); capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,MobilePlatform.ANDROID); try { driver=new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities); } catch (MalformedURLException e) { e.printStackTrace(); } Thread.sleep(10000); driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS); driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS); driver.get("http://www.goolge.com"); Thread.sleep(10000); driver.quit(); } }
解决方案
1. 匹配ChromeDriver与Chrome版本
模拟器中Chrome的版本必须和chromedriverExecutableDir下的ChromeDriver版本严格匹配(大版本一致,小版本尽量接近)。可以在模拟器Chrome的设置->关于Chrome查看版本,再下载对应版本的ChromeDriver。
2. 延长ADB超时时间
在DesiredCapabilities中添加配置,把ADB超时时间延长到60秒:
capabilities.setCapability("adbExecTimeout", 60000);
3. 优化模拟器性能
- 给模拟器分配更多CPU和内存(模拟器设置->高级->CPU/内存)
- 启用硬件加速选项,减少卡顿导致的超时
4. 清理冗余配置
代码中重复设置了platformName,删除其中一条;同时删除非标准的device配置:
// 删除重复的platformName配置 // capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,MobilePlatform.ANDROID); // 删除device配置 // capabilities.setCapability("device", "Android");
5. 检查依赖版本兼容性
确保Appium稳定版、Selenium 4.9.1、Appium Java客户端、Java 1.8.0_361之间版本兼容,建议优先使用最新稳定版Appium。
6. 修复ADB连接
打开命令行执行以下命令,确认模拟器连接正常:
adb devices adb shell
如果连接超时,重启ADB服务:
adb kill-server adb start-server
内容的提问来源于stack exchange,提问作者nandini
相关产品推荐
相关产品推荐

