Screengrab เป็นยูทิลิตี้ในระบบนิเวศของ Fastlane สำหรับการทำให้การสร้างสกรีนช็อตของแอปพลิเคชันมือถือบน Android และ iOS เป็นอัตโนมัติ แทนที่จะต้องเลื่อนหน้าจอด้วยตนเองบนอุปกรณ์หลายสิบเครื่อง นักพัฒนาสามารถรันคำสั่งเดียว และ Screengrab จะทำการจับภาพหน้าจอที่จำเป็นทั้งหมดโดยอัตโนมัติ ตามข้อมูลจาก Fastlane Docs, 2026 เครื่องมือนี้รองรับพร้อมกันสูงสุด 30 ภาษา และความละเอียดหน้าจอใด ๆ ที่ระบุในการกำหนดค่า
สิ่งสำคัญ
Screengrab — เป็นองค์ประกอบของระบบนิเวศ Fastlane สำหรับการสร้างสกรีนช็อตของแอปพลิเคชันมือถือโดยอัตโนมัติ เครื่องมือนี้เปิดตัวในปี 2015 เพื่อแก้ปัญหา: สำหรับการเผยแพร่ใน Google Play และ App Store ต้องใช้สกรีนช็อต 4 ถึง 10 ภาพต่อหนึ่งภาษา เมื่อรองรับ 30 ภาษานั่นคือ 120–300 ภาพที่ต้องทำด้วยตนเอง
นักพัฒนาจะเปิดแอพบนซิมูเลเตอร์หรืออุปกรณ์ด้วยตนเอง เลื่อนไปยังหน้าจอที่ต้องการ จับภาพหน้าจอ โอนไปยังคอมพิวเตอร์ ตัดแต่ง และบันทึกไว้ในโฟลเดอร์ที่ถูกต้อง ขั้นตอนนี้ทำซ้ำสำหรับแต่ละภาษาและการวางแนวแต่ละแบบ ตามข้อมูลจาก Google Play Console แอปพลิเคชันทั่วไปจะอัปเดตทุกสองสัปดาห์ ซึ่งทำให้สกรีนช็อตกลายเป็นกิจวัตรประจำที่ต้องทำซ้ำ
Screengrab แก้ปัญหาอย่างครบถ้วน: นักพัฒนาอธิบายสคริปต์ทดสอบบน UI เฟรมเวิร์ก (Espresso สำหรับ Android, XCTest สำหรับ iOS) และ Screengrab จะรันพวกมันบนอุปกรณ์และภาษาที่ต้องการทั้งหมดโดยอัตโนมัติ Fastlane ทำหน้าที่ประสานงานของกระบวนการ: สร้างบิลด์ รันการทดสอบ รวบรวมสกรีนช็อต และจัดเก็บในโครงสร้างโฟลเดอร์ที่ถูกต้อง
ผลลัพธ์ — สกรีนช็อตหลายร้อยภาพภายใน 10–15 นาที แทนที่จะใช้เวลาหลายชั่วโมงในการทำงานด้วยตนเอง Google แนะนำให้อัปเดตสกรีนช็อตทุกครั้งที่มีการเปลี่ยนแปลงอินเทอร์เฟซอย่างมีนัยสำคัญ และหากไม่มีการทำให้เป็นอัตโนมัติ คำแนะนำนี้มักถูกละเลย
สถาปัตยกรรม ของ Screengrab สร้างขึ้นจากสององค์ประกอบหลัก: ไคลเอนต์บนอุปกรณ์ (screengrab-lib) และตัวรันที่จัดการการรันการทดสอบและรวบรวมผลลัพธ์ บน Android ใช้เฟรมเวิร์กการทดสอบแบบ instrumental test บน iOS ใช้ XCTest
Fastlane เรียก action screengrab ซึ่งอ่านไฟล์การกำหนดค่า Screengrabfile ตัวรันจะสร้างเทสต์ APK ที่มีไลบรารี screengrab-lib เชื่อมต่ออยู่ ติดตั้งบนอุปกรณ์หรืออีมูเลเตอร์ที่เชื่อมต่ออยู่ และรัน UI-เทสที่มีคำกำกับสำหรับสกรีนช็อต
# Fastfile — คำอธิบาย lane สำหรับสกรีนช็อต
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 สร้างลำดับชั้นโฟลเดอร์: ภาษา → อุปกรณ์ → สกรีนช็อต โครงสร้างนี้ตรงกับข้อกำหนดของ Google Play Console และ App Store Connect App Store ต้องการขนาดที่กำหนดแน่นอนสำหรับอุปกรณ์แต่ละประเภท และ Screengrab สร้างภาพตามข้อกำหนดเฉพาะ
เครื่องมือสามารถรันการทดสอบแบบขนานบนอุปกรณ์และอีมูเลเตอร์ที่เชื่อมต่ออยู่ทั้งหมด อีมูเลเตอร์ Android จะเริ่มต้นโดยอัตโนมัติหากยังไม่ทำงาน สำหรับ iOS Screengrab ใช้ซิมูเลเตอร์ของ Xcode
การติดตั้ง Screengrab ประกอบด้วยสองส่วน: การเพิ่มไลบรารีในโปรเจกต์และการตั้งค่าไฟล์การกำหนดค่า บน Android จำเป็นต้องใช้ UI-เฟรมเวิร์ก Espresso และไลบรารี screengrab-lib จากคลัง Fastlane
ใน build.gradle ของโมดูลแอปพลิเคชัน จะเพิ่มไลบรารี screengrab-lib ไลบรารีนี้ให้คลาส ScreenCapturer ที่ใช้สำหรับจับภาพหน้าจอในขณะที่เรียกใช้
// build.gradle (โมดูล: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
UI-เทสจะถูกกำกับด้วยแอนโนเทชัน Screengrab.screenshot() ในจุดที่ต้องการ แต่ละการเรียกใช้จะจับภาพหน้าจอปัจจุบันและบันทึกไว้ภายใต้ชื่อที่ระบุ
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")
// การดำเนินการ: คลิกปุ่มเข้าสู่ระบบ
Screengrab.screenshot("login_screen")
}
}
ไฟล์ Screengrabfile เก็บพารามิเตอร์การรันใช้งาน: รายการอุปกรณ์ ภาษา การหมดเวลา และเส้นทางสำหรับการบันทึก โดยปกติไฟล์นี้จะอยู่ในโฟลเดอร์ fastlane ถัดจาก Fastfile
การแปลภาษา — คือความสามารถหลักของ Screengrab ที่ทำให้คนส่วนใหญ่เลือกใช้ เครื่องมือจะสลับภาษาของแอปพลิเคชันโดยอัตโนมัติก่อนการรันการทดสอบแต่ละครั้งและจับภาพบนภาษาที่ระบุทั้งหมด
ภาษาจะถูกระบุใน Screengrabfile ด้วยพารามิเตอร์ locales สำหรับแต่ละภาษา Screengrab จะติดตั้งแอปพลิเคชันใหม่พร้อมทรัพยากรที่สอดคล้องกันและรันรอบการทดสอบอย่างสมบูรณ์ LocaleTestRule บน Android จะสลับโลคอลของอุปกรณ์โดยอัตโนมัติ
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab สร้างไดเรกทอรีตามโครงสร้าง: screenshots/{locale}/{device_name}/{screenshot_name}.png โครงสร้างนี้ตรงกับข้อกำหนดของ Google Play ซึ่งทำให้สามารถอัปโหลดสกรีนช็อตผ่าน Fastlane deliver ด้วยคำสั่งเดียว
สำหรับ iOS App Store Connect คาดหวังสกรีนช็อตในโครงสร้างแบนตามภาษา Fastlane จะแปลงลำดับชั้นของ Screengrab เป็นรูปแบบที่ต้องการโดยอัตโนมัติเมื่อเผยแพร่
CI/CD — เป็นข้อได้เปรียบหลักของ Screengrab เครื่องมือสามารถรันจากบรรทัดคำสั่งและไม่ต้องการส่วนติดต่อแบบกราฟิก ทำให้เหมาะสำหรับการสร้างบนเซิร์ฟเวอร์
ในสภาพแวดล้อม CI จำเป็นต้องเริ่มต้นอีมูเลเตอร์ Android หรือซิมูเลเตอร์ iOS จากนั้นจึงเรียก lane ที่มีสกรีนช็อต GitHub Actions รองรับการเก็บแคช AVD ซึ่งทำให้การรันซ้ำเร็วขึ้น
ในการกำหนดค่า CI สิ่งสำคัญต้องคำนึงถึงข้อจำกัดด้านหน่วยความจำและเวลา อีมูเลเตอร์ Android ต้องใช้ RAM อย่างน้อย 2 GB ต่ออุปกรณ์ และการรันเต็มรูปแบบบน 7 ภาษาและ 2 อุปกรณ์ใช้เวลา 20–40 นาที
# Fastfile — lane สำหรับ CI พร้อมการหมดเวลา
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
สำหรับ Jenkins ใช้ขั้นตอน sh ด้วยการเรียก bundle exec fastlane แนะนำให้รันสกรีนช็อตตอนกลางคืนหรือตามทริกเกอร์หลังการ Merge เข้าสู่สาขาหลัก เพื่อไม่ให้ชะลอวงจรการพัฒนา
Screengrab ไม่ใช่เครื่องมือเดียวสำหรับการทำให้สกรีนช็อตเป็นอัตโนมัติ มีทางเลือกมากมายด้วยแนวทางที่แตกต่างกัน: เครื่องมือในตัวของ OS, แพลตฟอร์มเชิงพาณิชย์ และไลบรารีสำหรับจับภาพหน้าจอในโค้ด
| เครื่องมือ | แพลตฟอร์ม | การแปลภาษา | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | อัตโนมัติ | แบบเนทีฟ |
| ADB Shell | Android | ด้วยตนเอง | ผ่านสคริปต์ |
| XCTest | iOS | ด้วยตนเอง | ผ่าน xcodebuild |
| Firebase Test Lab | Android | ต้องตั้งค่า | ได้ |
| Appium | ข้ามแพลตฟอร์ม | ด้วยตนเอง | ผ่าน WebDriver |
ADB Shell ให้การควบคุมอย่างสมบูรณ์ แต่ต้องเขียนสคริปต์สำหรับแต่ละสถานการณ์ XCTest ถูกสร้างไว้ใน Xcode แต่ไม่จัดการการแปลภาษาโดยอัตโนมัติ Firebase Test Lab รันการทดสอบบนอุปกรณ์จริงในคลาวด์ ซึ่งให้ความครอบคลุมสูงสุด แต่มีค่าใช้จ่ายต่อนาที
Screengrab ชนะด้วยการเชื่อมโยง: Fastlane จัดการวงจรชีวิตทั้งหมดของการสร้าง — ตั้งแต่การคอมไพล์ไปจนถึงการเผยแพร่ Google Play รองรับโครงสร้างโฟลเดอร์ของ Screengrab โดยตรงผ่าน Fastlane deliver
เมื่อทำงานกับ Screengrab นักพัฒนามักพบกับปัญหาที่เกิดซ้ำหลายประการ ความรู้เกี่ยวกับข้อผิดพลาดทั่วไปช่วยลดเวลาในการดีบักในการรันครั้งแรก
ปัญหาเกิดขึ้นเมื่อ Screengrab จับภาพก่อนที่การเรนเดอร์หน้าจอจะเสร็จสมบูรณ์ วิธีแก้ไข — เพิ่มการหน่วงเวลา Thread.sleep() ก่อนเรียก screenshot() หรือใช้ IdlingResource จาก Espresso เพื่อรอการดำเนินการแบบอะซิงโครนัส
Screengrab-lib ต้องตรงกับเวอร์ชันของ Fastlane Fastlane มีการอัปเดตทุกเดือน และไลบรารีเก่าอาจไม่รองรับพารามิเตอร์การกำหนดค่าใหม่ วิธีแก้ไข — ซิงโครไนซ์เวอร์ชันผ่าน Gemfile และ gradle.properties
การรันบน 30 ภาษาบน 5 อุปกรณ์อาจใช้เวลามากกว่าหนึ่งชั่วโมง วิธีแก้ไข — แยกการรัน: หนึ่งสำหรับร้านค้าบนทุกภาษา อีกอันสำหรับใช้ภายในบนสองภาษา GitHub Actions อนุญาตให้ใช้เมทริกซ์กลยุทธ์สำหรับการรันแบบขนาน
อีมูเลเตอร์ Android ต้องการการจำลองเสมือนของฮาร์ดแวร์ ซึ่งไม่สามารถใช้งานได้เสมอบนเซิร์ฟเวอร์ CI KVM ต้องเปิดใช้งานมิฉะนั้นอีมูเลเตอร์จะไม่ทำงาน วิธีแก้ไข — ใช้ x86 อิมเมจที่ไม่มีการเร่ง GPU หรือ Firebase Test Lab
คำถามที่พบบ่อย
ADB จับภาพสิ่งที่แสดงบนหน้าจอในขณะนั้น Screengrab ผสานรวมกับ UI-เทสต์ สลับภาษาและอุปกรณ์โดยอัตโนมัติ และถ่ายภาพเป็นชุดตามสถานการณ์โดยไม่ต้องมีมนุษย์เกี่ยวข้อง
ไม่ได้ Screengrab เป็นส่วนประกอบของระบบนิเวศ Fastlane และใช้โครงสร้างพื้นฐานสำหรับการ build, ติดตั้ง และประสานงาน ไลบรารี screengrab-lib ไม่สามารถทำงานเดี่ยวได้ — จำเป็นต้องมี Fastlane เป็นออร์เคสเตรเตอร์
บนอุปกรณ์เครื่องเดียว การทดสอบ 10 ภาษา ใช้เวลา 15–25 นาที แต่ละภาษาต้องติดตั้งแอปใหม่และรัน UI-เทสต์ครบวงจร การรันแบบขนานบนหลายอุปกรณ์จะลดเวลาลงตามสัดส่วน
ใช่ Screengrab รองรับ iOS ผ่าน XCTest และซิมูเลเตอร์ของ Xcode การกำหนดค่าเหมือนกับ Android: เพิ่มภาษา, อุปกรณ์ และเขียน UI-เทสต์บน Swift โดยใช้ XCTest และการจับภาพผ่าน XCUIScreenshot
Screengrab ไม่มีโหมดเลือกเฉพาะ — การรันแต่ละครั้งจะสร้างสกรีนช็อตทั้งหมด แนะนำให้ตั้งค่า lane แยกสำหรับ CI ที่มีรายการภาษาเฉพาะ เพื่อไม่ให้เขียนทับภาพที่มีอยู่แล้วจากการรันหลัก
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม