A Screengrab egy segédprogram a Fastlane ökoszisztémából a mobilalkalmazások képernyőképeinek automatizált készítéséhez Android és iOS rendszerekhez. Ahelyett, hogy a fejlesztő manuálisan görgetné a képernyőket több tucat eszközön, elindít egy parancsot, és a Screengrab önállóan elkészíti az összes szükséges képernyő felvételét. A Fastlane Docs, 2026 szerint az eszköz egyszerre akár 30 nyelvet és bármilyen, a konfigurációban megadott képernyőfelbontást támogat.
A lényeg
Screengrab — a Fastlane ökoszisztéma egyik komponense, amely mobilalkalmazások képernyőképeinek automatizált készítésére szolgál. Az eszköz 2015-ben jelent meg válaszként a problémára: a Google Play és App Store publikáláshoz nyelvenként 4–10 képernyőkép szükséges. 30 nyelv támogatása esetén ez 120–300 manuálisan készített felvételt jelent.
A fejlesztő manuálisan indítja el az alkalmazást egy szimulátoron vagy eszközön, a szükséges képernyőre görget, képernyőképet készít, átviszi a számítógépre, levágja és elmenti a megfelelő mappába. Az eljárás megismétlődik minden nyelv és minden tájolás esetén. A Google Play Console szerint az átlagos alkalmazás két hetente frissül, ami a képernyőképeket rendszeres rutinná teszi.
A Screengrab radikálisan oldja meg a problémát: a fejlesztő leírja a tesztforgatókönyveket az UI-keretrendszerben (Espresso Androidhoz, XCTest iOS-hez), a Screengrab pedig automatikusan futtatja azokat az összes szükséges eszközön és nyelven. A Fastlane koordinálja a folyamatot: összeállítja a build-et, futtatja a teszteket, összegyűjti a képernyőképeket és becsomagolja a megfelelő mappastruktúrába.
Az eredmény — száz képernyőkép 10–15 perc alatt, több óra manuális munka helyett. A Google javasolja a képernyőképek frissítését minden jelentős felületi változáskor, és automatizálás nélkül ezt a tanácsot gyakran figyelmen kívül hagyják.
Architektúra A Screengrab két kulcskomponens köré épül: az eszközön lévő kliens (screengrab-lib) és a runner, amely a tesztek futtatását és az eredmények gyűjtését kezeli. Androidon az instrumentális tesztkeretrendszer, iOS-en az XCTest használatos.
A Fastlane meghívja a screengrab akciót, amely beolvassa a Screengrabfile konfigurációs fájlt. A runner összeállítja a teszt APK-t a csatolt screengrab-lib könyvtárral, telepíti a csatlakoztatott eszközökre vagy emulátorokra, és elindítja a képernyőképekhez annotációkkal megjelölt UI teszteket.
# Fastfile — lane leírása képernyőképekhez
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
A Screengrab mappahierarchiát hoz létre: nyelv → eszköz → képernyőképek. A struktúra teljes mértékben megfelel a Google Play Console és App Store Connect követelményeinek. Az App Store szigorúan meghatározott méreteket követel meg minden eszköztípushoz, és a Screengrab pontosan a specifikációknak megfelelően generálja a képeket.
Az eszköz párhuzamosan tudja futtatni a teszteket az összes csatlakoztatott eszközön és emulátoron. Az Android emulátorok automatikusan elindulnak, ha nem aktívak. Az iOS-hez a Screengrab Xcode szimulátorokat használ.
A Screengrab telepítése két részből áll: a könyvtár hozzáadása a projekthez és a konfigurációs fájl beállítása. Androidhoz szükség van az Espresso UI-keretrendszerre és a screengrab-lib könyvtárra a Fastlane tárházból.
Az alkalmazásmodul build.gradle fájljában hozzáadásra kerül a screengrab-lib függőség. A könyvtár biztosítja a ScreenCapturer osztályt, amely a hívás pillanatában készít képernyőképet.
// build.gradle (modul: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
Az UI teszt a szükséges pontokon Screengrab.screenshot() annotációval van jelölve. Minden hívás képernyőképet készít az aktuális képernyőről és elmenti a megadott néven.
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")
// Műveletek: kattintson a bejelentkezés gombra
Screengrab.screenshot("login_screen")
}
}
A Screengrabfile fájl tárolja a futtatás paramétereit: eszközök listája, nyelvek, időtúllépések és a mentési útvonal. A fájl általában a fastlane mappában található a Fastfile mellett.
Lokalizáció — a Screengrab kulcsfontosságú képessége, ami miatt leggyakrabban választják. Az eszköz automatikusan átkapcsolja az alkalmazás nyelvét minden tesztfuttatás előtt, és az összes megadott nyelven készít felvételeket.
A nyelvek a Screengrabfile-ban a locales paraméterrel adhatók meg. Minden nyelvhez a Screengrab újratelepíti az alkalmazást a megfelelő erőforrásokkal, és elindít egy teljes tesztciklust. A LocaleTestRule Androidon automatikusan átkapcsolja az eszköz területi beállítását.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
A Screengrab könyvtárakat hoz létre a következő séma szerint: screenshots/{locale}/{device_name}/{screenshot_name}.png. Ez a struktúra közvetlenül megfelel a Google Play követelményeinek, lehetővé téve a képernyőképek feltöltését a Fastlane deliver segítségével egyetlen paranccsal.
Az iOS esetében az App Store Connect a képernyőképeket lapos struktúrában várja nyelvek szerint. A Fastlane automatikusan konvertálja a Screengrab hierarchiát a szükséges formátumba a publikálás során.
CI/CD integráció a Screengrab egyik fő előnye. Az eszköz parancssorból indul, és nem igényel grafikus felületet, ami ideálissá teszi szerveroldali build-ekhez.
CI környezetben el kell indítani az Android emulátort vagy iOS szimulátort, majd meg kell hívni a lane-t képernyőképekkel. A GitHub Actions támogatja az AVD gyorsítótárazását, ami felgyorsítja az ismételt futtatásokat.
A CI konfigurációban fontos figyelembe venni a memória- és időkorlátokat. Az Android emulátorok legalább 2 GB RAM-ot igényelnek eszközönként, és egy teljes futtatás 7 nyelven és 2 eszközön 20–40 percet vesz igénybe.
# Fastfile — lane CI-hoz időtúllépésekkel
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
A Jenkinshez a sh lépés használatos a bundle exec fastlane hívással. Javasolt a képernyőképek éjszakai futtatása vagy a főágba történő merge utáni triggerrel, hogy ne lassítsa a fejlesztési ciklust.
Screengrab — nem az egyetlen eszköz a képernyőképek automatizálására. Léteznek alternatívák különböző megközelítésekkel: beépített operációsrendszer-eszközök, kereskedelmi platformok és könyvtárak képernyőképek készítéséhez kódban.
| Eszköz | Platform | Lokalizáció | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Automatikus | Natív |
| ADB Shell | Android | Manuális | Scriptekkel |
| XCTest | iOS | Manuális | xcodebuild-del |
| Firebase Test Lab | Android | Beállítást igényel | Igen |
| Appium | Keresztplatformos | Manuális | WebDriver-rel |
Az ADB Shell teljes irányítást ad, de scriptek írását igényli minden forgatókönyvhöz. Az XCTest beépített az Xcode-ba, de nem kezeli automatikusan a lokalizációt. A Firebase Test Lab valódi eszközökön futtatja a teszteket a felhőben, maximális lefedettséget nyújtva, de percenkénti fizetést igényel.
A Screengrab a kombinációnak köszönhetően nyer: a Fastlane kezeli a build teljes életciklusát — a fordítástól a publikálásig. A Google Play közvetlenül fogadja a Screengrab mappastruktúráját a Fastlane deliver segítségével.
A Screengrab használata során a fejlesztők leggyakrabban néhány ismétlődő problémával találkoznak. A tipikus hibák ismerete csökkenti a hibakeresési időt az első futtatáskor.
A probléma akkor jelentkezik, amikor a Screengrab a képernyő renderelésének befejeződése előtt készít felvételt. Megoldás — Thread.sleep() késleltetés hozzáadása a screenshot() hívás előtt, vagy IdlingResource használata az Espressoból az aszinkron műveletek várakozásához.
A screengrab-lib könyvtárnak meg kell felelnie a Fastlane verziójának. A Fastlane havonta frissül, és a régi könyvtár esetleg nem támogatja az új konfigurációs paramétereket. Megoldás — verziók szinkronizálása a Gemfile és gradle.properties segítségével.
A futtatás 30 nyelven 5 eszközön több mint egy órát is igénybe vehet. Megoldás — a futtatások szétválasztása: egy az áruháznak minden nyelven, egy másik a belső igényekhez két nyelven. A GitHub Actions lehetővé teszi a stratégiák mátrixának használatát párhuzamos futtatásokhoz.
Az Android emulátor hardvervirtualizációt igényel, ami nem mindig elérhető a CI szervereken. A KVM-nek engedélyezve kell lennie, különben az emulátor nem indul el. Megoldás — x86 rendszerképek használata GPU-gyorsítás nélkül vagy Firebase Test Lab.
Gyakran ismételt kérdések
Az ADB képet készít arról, ami éppen a képernyőn látható. A Screengrab integrálódik az UI tesztekkel, automatikusan váltja a nyelveket és eszközöket, és forgatókönyv szerint készít egy sorozat felvételt emberi beavatkozás nélkül.
Nem, a Screengrab a Fastlane ökoszisztéma komponense, és annak infrastruktúráját használja a fordításhoz, telepítéshez és koordinációhoz. A screengrab-lib könyvtár önmagában nem fut — a Fastlane szükséges orkesztrátorként.
Egy eszközön a futtatás 10 nyelven 15–25 percet vesz igénybe. Minden nyelv az alkalmazás újratelepítését és egy teljes UI tesztciklust igényel. A párhuzamos futtatás több eszközön arányosan csökkenti az időt.
Igen, a Screengrab támogatja az iOS-t az XCTest és Xcode szimulátorok segítségével. A konfiguráció hasonló az Androidhoz: nyelvek és eszközök hozzáadása, az UI tesztek Swift-ben íródnak XCTest használatával és képek XCUIScreenshot segítségével.
A Screengrab nem támogatja a növekményes módot — minden futtatás teljes képernyőképkészletet generál. Javasolt egy külön lane beállítása a CI számára korlátozott nyelvlistával, hogy ne írja felül a meglévő képeket a fő futtatásból.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is