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

React Native E2E测试:如何通过WebDriverIO+Appium自动启动Android模拟器?

实现Android模拟器自动启动的方案

背景

我正在使用Appium + WebDriverIO为React Native应用运行E2E测试。iOS平台运行测试时系统会自动启动指定模拟器,但Android平台必须手动启动模拟器后才能执行测试。

执行命令:

npx wdio run wdio.conf.js

当前wdio.conf.js配置:

export const config = {
    capabilities: [
        // Android
        {
            platformName: "Android",
            app: "./path/to/apk/app-debug.apk",
            deviceName: "Pixel_4_API_30",
            platformVersion: "11.0",
        },

        // iOS
        {
            platformName: "iOS",
            automationName: "XCUITest",
            deviceName: "iPhone 11",
            platformVersion: "13.5",
            app: "./path/to/app/My App Name.app",
        },
    ],

    // ...
};

其中Android的deviceName(Pixel_4_API_30)来自emulator -list-avds输出,运行环境为MacOS。


解决方案

方法一:通过Appium配置自动启动AVD

在Android的capabilities中添加以下配置项,让Appium自动启动指定模拟器:

// Android capabilities 新增配置
{
    platformName: "Android",
    app: "./path/to/apk/app-debug.apk",
    deviceName: "Pixel_4_API_30",
    platformVersion: "11.0",
    automationName: "UiAutomator2", // 明确指定自动化驱动,确保兼容性
    avd: "Pixel_4_API_30", // 填写要启动的AVD名称,与deviceName一致即可
    avdLaunchTimeout: 120000, // 可选:设置启动超时时间,单位毫秒,默认60000
    avdReadyTimeout: 120000, // 可选:设置模拟器就绪超时时间,单位毫秒,默认60000
}

添加后,Appium会在测试前自动调用emulator -avd Pixel_4_API_30启动模拟器,无需手动操作。

方法二:通过WebDriverIO钩子函数手动启动模拟器

如果方法一不生效,可以在wdio.conf.js的beforeSession钩子中添加启动模拟器的逻辑:

import { execSync } from 'child_process';

export const config = {
    // ... 其他配置

    beforeSession: (config, capabilities, specs) => {
        // 仅在Android测试时执行启动逻辑
        if (capabilities.platformName === 'Android') {
            try {
                // 检查模拟器是否已运行
                execSync('adb devices | grep emulator');
            } catch (err) {
                // 未运行则启动指定AVD
                execSync('emulator -avd Pixel_4_API_30 -no-boot-anim -no-window', { stdio: 'ignore' });
                // 等待模拟器完全启动就绪
                execSync('adb wait-for-device shell "while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done"');
            }
        }
    },

    // ... 其他钩子
};
  • -no-boot-anim:关闭启动动画,加快启动速度
  • -no-window:可选参数,适合CI环境,不显示模拟器窗口
  • 最后的shell命令确保模拟器完成系统启动后再执行测试

注意事项

  1. 确保emulator和adb命令已加入系统环境变量,MacOS下可检查~/.zshrc或~/.bash_profile是否配置了Android SDK路径:
    export ANDROID_HOME=$HOME/Library/Android/sdk
    export PATH=$PATH:$ANDROID_HOME/emulator
    export PATH=$PATH:$ANDROID_HOME/platform-tools
    
  2. 确认AVD名称正确,可通过emulator -list-avds命令验证
  3. 若遇到启动超时,可适当调大avdLaunchTimeout和avdReadyTimeout的数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:10:44