如何捕获Android应用仅显示1-2秒的启动闪屏截图?
你遇到的核心问题是:Appium初始化AndroidDriver时,默认会等待应用启动到指定的目标Activity(通常是首页),等driver创建完成返回时,闪屏已经走完那1-2秒了。下面给你几个靠谱的解决思路,按推荐程度排序:
1. 让Appium等待闪屏Activity(最稳定)
这是最可靠的方法,核心是告诉Appium:不要等首页,先等闪屏页出现再完成driver初始化。
步骤:
第一步:获取闪屏页的Activity名称
打开应用,在闪屏显示的瞬间,执行adb命令:adb shell dumpsys window | grep mCurrentFocus输出会类似
mCurrentFocus=Window{xxxx u0 com.your.app/.SplashActivity},其中com.your.app/.SplashActivity就是闪屏的Activity路径。第二步:修改Capabilities配置
在你的appCapabilities中添加appWaitActivity参数,指定为闪屏Activity:// 替换成你拿到的闪屏Activity路径 appCapabilities.SetCapability("appWaitActivity", "com.your.app/.SplashActivity");第三步:正常初始化driver并截图
现在初始化driver时,Appium会等待闪屏Activity出现后才返回,这时候立即截图就能捕获到闪屏:driver = new AndroidDriver<AndroidElement>(new Uri(AppConfiguration.AppiumServerUrl), appCapabilities); // 此时闪屏正显示,直接截图 var screenshot = driver.TakeScreenshot();
2. 禁用自动启动,手动启动后立即截图
如果不确定闪屏Activity的名称,或者想更灵活控制启动时机,可以用这个方法:
步骤:
修改Capabilities,禁用自动启动
appCapabilities.SetCapability("autoLaunch", false);初始化driver后手动启动应用并截图
初始化driver后,手动触发应用启动,此时闪屏会立刻显示,紧接着截图:driver = new AndroidDriver<AndroidElement>(new Uri(AppConfiguration.AppiumServerUrl), appCapabilities); // 手动启动应用,闪屏开始显示 driver.LaunchApp(); // 立即截图(如果闪屏加载稍慢,可加500ms左右的短等待,比如Thread.Sleep(500)) var screenshot = driver.TakeScreenshot();
3. 禁用Appium的启动等待(适合快速测试)
如果你的闪屏是应用启动的第一个页面,可以禁用Appium的启动等待逻辑,让driver初始化后立即执行截图:
步骤:
修改Capabilities,关闭启动等待
appCapabilities.SetCapability("appWaitForLaunch", false);初始化后立即截图
此时driver会在应用启动过程中就返回,你需要立即执行截图:driver = new AndroidDriver<AndroidElement>(new Uri(AppConfiguration.AppiumServerUrl), appCapabilities); // 无需等待,直接截图 var screenshot = driver.TakeScreenshot();注意:这个方法可能受设备性能影响,如果设备启动应用较慢,可能需要加极短的等待时间。
内容的提问来源于stack exchange,提问作者manutd

