Screengrab es una utilidad del ecosistema Fastlane para automatizar la creación de capturas de pantalla de aplicaciones móviles en Android y iOS. En lugar de deslizar manualmente las pantallas en decenas de dispositivos, el desarrollador ejecuta un solo comando y Screengrab captura de forma independiente todas las pantallas necesarias. Según Fastlane Docs, 2026, la herramienta admite hasta 30 idiomas simultáneamente y cualquier resolución de pantalla especificada en la configuración.
Puntos clave
Screengrab es un componente del ecosistema Fastlane diseñado para la creación automatizada de capturas de pantalla de aplicaciones móviles. La herramienta apareció en 2015 como respuesta al problema: para publicar en Google Play y App Store se requieren de 4 a 10 capturas por idioma. Con soporte para 30 idiomas, esto supone entre 120 y 300 capturas manuales.
Un desarrollador inicia manualmente la aplicación en un simulador o dispositivo, se desplaza hasta la pantalla deseada, toma una captura, la transfiere al ordenador, la recorta y la guarda en la carpeta correcta. El procedimiento se repite para cada idioma y cada orientación. Según Google Play Console, la aplicación media se actualiza cada dos semanas, convirtiendo las capturas de pantalla en una rutina habitual.
Screengrab resuelve el problema de raíz: el desarrollador describe escenarios de prueba con un framework de UI (Espresso para Android, XCTest para iOS), y Screengrab los ejecuta en todos los dispositivos e idiomas necesarios de forma automática. Fastlane coordina el proceso: compila la aplicación, ejecuta las pruebas, recoge las capturas y las empaqueta en la estructura de carpetas requerida.
El resultado: cien capturas de pantalla en 10–15 minutos en lugar de varias horas de trabajo manual. Google recomienda actualizar las capturas con cada cambio significativo de la interfaz, y sin automatización este consejo suele ignorarse.
La arquitectura de Screengrab se basa en dos componentes clave: un cliente en el dispositivo (screengrab-lib) y un ejecutor que gestiona la ejecución de las pruebas y la recogida de resultados. En Android se utiliza el framework de pruebas instrumentadas; en iOS, XCTest.
Fastlane llama a la acción screengrab, que lee el archivo de configuración Screengrabfile. El ejecutor compila el APK de prueba con la librería screengrab-lib conectada, lo instala en los dispositivos o emuladores conectados y ejecuta las pruebas de UI marcadas con anotaciones para capturas de pantalla.
# Fastfile — descripción de lane para capturas de pantalla
lane :screenshots do
capture_android_screenshots(
output_directory: "fastlane/metadata/android/screenshots",
locales: ["ru-RU", "en-US", "de-DE"],
devices: ["pixel_6", "pixel_tablet"],
use_tests_external_storage: true
)
end
Screengrab crea una jerarquía de carpetas: idioma → dispositivo → capturas. La estructura coincide completamente con los requisitos de Google Play Console y App Store Connect. App Store exige tamaños estrictamente definidos para cada tipo de dispositivo, y Screengrab genera capturas exactamente según las especificaciones.
La herramienta puede ejecutar pruebas en paralelo en todos los dispositivos y emuladores conectados. Los emuladores de Android se inician automáticamente si no están activos. Para iOS, Screengrab utiliza los simuladores de Xcode.
La instalación de Screengrab consta de dos partes: añadir la librería al proyecto y configurar el archivo de configuración. En Android se necesitan el framework de UI Espresso y la librería screengrab-lib del repositorio de Fastlane.
En el build.gradle del módulo de la aplicación se añade la dependencia screengrab-lib. La librería proporciona la clase ScreenCapturer, que realiza una captura de pantalla en el momento de la llamada.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
Una prueba de UI se marca con la anotación Screengrab.screenshot() en los puntos necesarios. Cada llamada captura la pantalla actual y la guarda con el nombre especificado.
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
class ScreenshotTest {
@get:Rule
val localeTestRule = LocaleTestRule()
@Test
fun testTakeScreenshots() {
Screengrab.screenshot("main_screen")
// Acciones: tocar el botón de inicio de sesión
Screengrab.screenshot("login_screen")
}
}
El archivo Screengrabfile almacena los parámetros de ejecución: lista de dispositivos, idiomas, tiempos de espera y ruta de guardado. El archivo suele estar ubicado en la carpeta fastlane, junto al Fastfile.
La localización es la característica clave de Screengrab y la razón principal por la que se elige con más frecuencia. La herramienta cambia automáticamente el idioma de la aplicación antes de cada ejecución de pruebas y realiza capturas en todos los idiomas especificados.
Los idiomas se definen en el Screengrabfile mediante el parámetro locales. Para cada idioma, Screengrab reinstala la aplicación con los recursos correspondientes y ejecuta el ciclo completo de pruebas. LocaleTestRule en Android cambia automáticamente la configuración regional del dispositivo.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab crea directorios siguiendo el esquema: screenshots/{locale}/{device_name}/{screenshot_name}.png. Esta estructura coincide directamente con los requisitos de Google Play, lo que permite subir las capturas mediante Fastlane deliver con un solo comando.
Para iOS, App Store Connect espera las capturas en una estructura plana por idioma. Fastlane convierte automáticamente la jerarquía de Screengrab al formato requerido al publicar.
La integración con CI/CD es una de las principales ventajas de Screengrab. La herramienta se ejecuta desde la línea de comandos y no requiere interfaz gráfica, lo que la hace ideal para compilaciones en servidor.
En un entorno CI, es necesario iniciar un emulador de Android o un simulador de iOS y luego llamar al lane con las capturas. GitHub Actions admite el almacenamiento en caché de AVD, lo que acelera las ejecuciones repetidas.
En la configuración de CI, es importante tener en cuenta las limitaciones de memoria y tiempo. Los emuladores de Android requieren al menos 2 GB de RAM por dispositivo, y una ejecución completa en 7 idiomas y 2 dispositivos tarda entre 20 y 40 minutos.
# Fastfile — lane para CI con tiempos de espera
lane :ci_screenshots do
capture_android_screenshots(
locales: ["en-US", "ru-RU"],
devices: ["pixel_6"],
clear_previous_screenshots: true,
tests_timeout: "600",
output_directory: "screenshots/ci"
)
end
Para Jenkins se utiliza el paso sh con la llamada a bundle exec fastlane. Se recomienda ejecutar las capturas por la noche o mediante un desencadenador tras la fusión en la rama principal para no ralentizar el ciclo de desarrollo.
Screengrab no es la única herramienta para automatizar capturas de pantalla. Existen alternativas con diferentes enfoques: herramientas integradas del sistema operativo, plataformas comerciales y librerías de capturas en código.
| Herramienta | Plataforma | Localización | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Automática | Nativa |
| ADB Shell | Android | Manual | Mediante scripts |
| XCTest | iOS | Manual | Mediante xcodebuild |
| Firebase Test Lab | Android | Requiere configuración | Sí |
| Appium | Multiplataforma | Manual | Mediante WebDriver |
ADB Shell ofrece control total, pero requiere escribir scripts para cada escenario. XCTest está integrado en Xcode, pero no gestiona la localización automáticamente. Firebase Test Lab ejecuta pruebas en dispositivos reales en la nube, lo que proporciona la máxima cobertura, pero cobra por minuto.
Screengrab gana por la combinación: Fastlane gestiona todo el ciclo de vida de la compilación, desde la compilación hasta la publicación. Google Play acepta directamente la estructura de carpetas de Screengrab mediante Fastlane deliver.
Al trabajar con Screengrab, los desarrolladores suelen encontrarse con varios problemas recurrentes. Conocer los errores típicos reduce el tiempo de depuración en la primera ejecución.
El problema surge cuando Screengrab realiza la captura antes de que finalice el renderizado de la pantalla. La solución es añadir una pausa Thread.sleep() antes de llamar a screenshot() o utilizar IdlingResource de Espresso para esperar operaciones asíncronas.
La versión de screengrab-lib debe coincidir con la versión de Fastlane. Fastlane se actualiza mensualmente, y una librería antigua podría no admitir nuevos parámetros de configuración. La solución es sincronizar las versiones mediante Gemfile y gradle.properties.
Ejecutar en 30 idiomas en 5 dispositivos puede llevar más de una hora. La solución es dividir las ejecuciones: una para la tienda en todos los idiomas y otra para necesidades internas en dos idiomas. GitHub Actions permite utilizar estrategias de matriz para ejecuciones en paralelo.
El emulador de Android requiere virtualización de hardware, que no siempre está disponible en los servidores CI. KVM debe estar activado; de lo contrario, el emulador no se inicia. La solución es usar imágenes x86 sin aceleración GPU o Firebase Test Lab.
Preguntas frecuentes
ADB captura lo que se muestra en la pantalla en el momento actual. Screengrab se integra con las pruebas de UI, cambia automáticamente los idiomas y dispositivos, y realiza una serie de capturas según un escenario sin intervención humana.
No, Screengrab es un componente del ecosistema Fastlane y utiliza su infraestructura para compilar, instalar y coordinar. La librería screengrab-lib no funciona por separado: se necesita Fastlane como orquestador.
En un solo dispositivo, una ejecución en 10 idiomas tarda entre 15 y 25 minutos. Cada idioma requiere reinstalar la aplicación y un ciclo completo de pruebas de UI. La ejecución en paralelo en varios dispositivos reduce el tiempo proporcionalmente.
Sí, Screengrab admite iOS mediante XCTest y los simuladores de Xcode. La configuración es similar a la de Android: se añaden idiomas y dispositivos, y las pruebas de UI en Swift se escriben con XCTest y capturas mediante XCUIScreenshot.
Screengrab no admite modo incremental: cada ejecución genera un conjunto completo de capturas. Se recomienda configurar un lane separado para CI con una lista limitada de idiomas para evitar sobrescribir las capturas existentes de la ejecución principal.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también