Screengrab este un utilitar din ecosistemul Fastlane pentru automatizarea creării de capturi de ecran ale aplicațiilor mobile pentru Android și iOS. În loc să derulezi manual ecranele pe zeci de dispozitive, dezvoltatorul lansează o singură comandă, iar Screengrab face independent capturile tuturor ecranelor necesare. Potrivit Fastlane Docs, 2026, instrumentul suportă simultan până la 30 de limbi și orice rezoluții de ecran specificate în configurație.
Principalele
Screengrab — este o componentă a ecosistemului Fastlane destinată creării automatizate a capturilor de ecran ale aplicațiilor mobile. Instrumentul a apărut în 2015 ca răspuns la problemă: pentru publicarea în Google Play și App Store sunt necesare de la 4 la 10 capturi de ecran pentru fiecare limbă. Cu suport pentru 30 de limbi, aceasta înseamnă 120–300 de imagini realizate manual.
Dezvoltatorul lansează manual aplicația pe simulator sau dispozitiv, derulează până la ecranul necesar, face o captură de ecran, o transferă pe computer, o decupează și o salvează în folderul potrivit. Procedura se repetă pentru fiecare limbă și fiecare orientare. Potrivit Google Play Console, aplicația medie se actualizează o dată la două săptămâni, ceea ce transformă capturile de ecran într-o rutină regulată.
Screengrab rezolvă problema radical: dezvoltatorul descrie scenarii de teste în framework-ul UI (Espresso pentru Android, XCTest pentru iOS), iar Screengrab le rulează pe toate dispozitivele și limbile necesare automat. Fastlane coordonează procesul: compilează build-ul, rulează testele, colectează capturile de ecran și le ambalează în structura de foldere corespunzătoare.
Rezultatul — o sută de capturi de ecran în 10–15 minute în loc de câteva ore de muncă manuală. Google recomandă actualizarea capturilor de ecran la fiecare modificare semnificativă a interfeței, iar fără automatizare acest sfat este adesea ignorat.
Arhitectura Screengrab este construită în jurul a două componente cheie: clientul pe dispozitiv (screengrab-lib) și runner-ul care gestionează lansarea testelor și colectarea rezultatelor. Pe Android se folosește framework-ul de testare instrumental, pe iOS — XCTest.
Fastlane apelează acțiunea screengrab care citește fișierul de configurare Screengrabfile. Runner-ul compilează APK-ul de test cu biblioteca screengrab-lib conectată, îl instalează pe dispozitivele conectate sau emulatoare și rulează testele UI marcate cu adnotări pentru capturi de ecran.
# Fastfile — descriere lane pentru capturi de ecran
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 creează o ierarhie de foldere: limba → dispozitiv → capturi de ecran. Structura corespunde complet cerințelor Google Play Console și App Store Connect. App Store solicită dimensiuni strict definite pentru fiecare tip de dispozitiv, iar Screengrab generează imagini exact conform specificațiilor.
Instrumentul poate rula teste în paralel pe toate dispozitivele și emulatoarele conectate. Emulatoarele Android se lansează automat dacă nu sunt active. Pentru iOS, Screengrab utilizează simulatoarele Xcode.
Instalarea Screengrab constă din două părți: adăugarea bibliotecii în proiect și configurarea fișierului de configurare. Pe Android este necesar framework-ul UI Espresso și biblioteca screengrab-lib din depozitul Fastlane.
În build.gradle modulului aplicației se adaugă dependența screengrab-lib. Biblioteca oferă clasa ScreenCapturer care face o captură de ecran în momentul apelării.
// build.gradle (modul: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
Testul UI este marcat cu adnotarea Screengrab.screenshot() în punctele necesare. Fiecare apel face o captură a ecranului curent și o salvează cu numele specificat.
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")
// Acțiuni: faceți clic pe butonul de autentificare
Screengrab.screenshot("login_screen")
}
}
Fișierul Screengrabfile stochează parametrii de lansare: lista dispozitivelor, limbile, timeout-urile și calea de salvare. Fișierul se află de obicei în folderul fastlane lângă Fastfile.
Localizarea — capacitatea cheie a Screengrab, pentru care este cel mai adesea ales. Instrumentul comută automat limba aplicației înainte de fiecare rulare a testelor și face capturi în toate limbile specificate.
Limbile se setează în Screengrabfile cu parametrul locales. Pentru fiecare limbă, Screengrab reinstalează aplicația cu resursele corespunzătoare și rulează un ciclu complet de teste. LocaleTestRule pe Android comută automat localizarea dispozitivului.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab creează directoare după schema: screenshots/{locale}/{device_name}/{screenshot_name}.png. Această structură corespunde direct cerințelor Google Play, permițând încărcarea capturilor de ecran prin Fastlane deliver cu o singură comandă.
Pentru iOS, App Store Connect așteaptă capturi de ecran într-o structură plată pe limbi. Fastlane convertește automat ierarhia Screengrab în formatul necesar la publicare.
CI/CD integrarea este unul dintre principalele avantaje ale Screengrab. Instrumentul se lansează din linia de comandă și nu necesită interfață grafică, ceea ce îl face ideal pentru compilări server.
În mediul CI este necesar să se lanseze emulatorul Android sau simulatorul iOS, după care să se apeleze lane cu capturi de ecran. GitHub Actions suportă caching AVD, ceea ce accelerează lansările repetate.
În configurația CI este important să se țină cont de limitările de memorie și timp. Emulatoarele Android necesită cel puțin 2 GB RAM per dispozitiv, iar o rulare completă pe 7 limbi și 2 dispozitive durează 20–40 de minute.
# Fastfile — lane pentru CI cu timeout-uri
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
Pentru Jenkins se folosește pasul sh cu apelul bundle exec fastlane. Se recomandă lansarea capturilor de ecran noaptea sau după un trigger după merge în branch-ul principal, pentru a nu încetini ciclul de dezvoltare.
Screengrab — nu este singurul instrument pentru automatizarea capturilor de ecran. Există alternative cu abordări diferite: instrumente încorporate ale sistemului de operare, platforme comerciale și biblioteci pentru capturi de ecran în cod.
| Instrument | Platformă | Localizare | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Automată | Nativ |
| ADB Shell | Android | Manuală | Prin scripturi |
| XCTest | iOS | Manuală | Prin xcodebuild |
| Firebase Test Lab | Android | Necesită configurare | Da |
| Appium | Cross-platformă | Manuală | Prin WebDriver |
ADB Shell oferă control total, dar necesită scrierea de scripturi pentru fiecare scenariu. XCTest este încorporat în Xcode, dar nu gestionează automat localizarea. Firebase Test Lab rulează teste pe dispozitive reale în cloud, oferind acoperire maximă, dar necesită plată pentru fiecare minut.
Screengrab câștigă datorită combinației: Fastlane gestionează întregul ciclu de viață al compilării — de la compilare la publicare. Google Play acceptă direct structura de foldere Screengrab prin Fastlane deliver.
În lucrul cu Screengrab, dezvoltatorii se confruntă cel mai des cu câteva probleme recurente. Cunoașterea erorilor tipice reduce timpul de depanare la prima lansare.
Problema apare când Screengrab face captura înainte de finalizarea randării ecranului. Soluția — adăugarea unei întârzieri Thread.sleep() înainte de apelul screenshot() sau utilizarea IdlingResource din Espresso pentru așteptarea operațiilor asincrone.
Biblioteca screengrab-lib trebuie să corespundă versiunii Fastlane. Fastlane se actualizează lunar, iar biblioteca veche poate să nu suporte noii parametri de configurare. Soluția — sincronizarea versiunilor prin Gemfile și gradle.properties.
Lansarea pe 30 de limbi pe 5 dispozitive poate dura peste o oră. Soluția — împărțirea rulărilor: una pentru magazin în toate limbile, alta pentru nevoi interne în două limbi. GitHub Actions permite utilizarea matricei de strategii pentru rulări paralele.
Emulatorul Android necesită virtualizare hardware, care nu este întotdeauna disponibilă pe serverele CI. KVM trebuie să fie activat, altfel emulatorul nu pornește. Soluția — utilizarea imaginilor x86 fără accelerare GPU sau Firebase Test Lab.
Întrebări frecvente
ADB face o captură a ceea ce este afișat pe ecran în momentul respectiv. Screengrab se integrează cu testele UI, comută automat limbile, dispozitivele și face o serie de capturi conform scenariului fără participarea umană.
Nu, Screengrab este o componentă a ecosistemului Fastlane și utilizează infrastructura acestuia pentru compilare, instalare și coordonare. Biblioteca screengrab-lib nu rulează separat — este necesar Fastlane ca orchestrator.
Pe un singur dispozitiv, rularea pe 10 limbi durează 15–25 de minute. Fiecare limbă necesită reinstalarea aplicației și un ciclu complet de teste UI. Rularea paralelă pe mai multe dispozitive reduce timpul proporțional.
Da, Screengrab suportă iOS prin XCTest și simulatoare Xcode. Configurarea este similară cu Android: se adaugă limbi, dispozitive, iar testele UI în Swift se scriu folosind XCTest și capturi prin XCUIScreenshot.
Screengrab nu suportă modul incremental — fiecare lansare generează un set complet de capturi de ecran. Se recomandă configurarea unui lane separat pentru CI cu o listă limitată de limbi, pentru a nu suprascrie imaginile existente din rularea principală.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și