Appium คือเฟรมเวิร์กข้ามแพลตฟอร์มสำหรับการทดสอบแอปพลิเคชันมือถือ เว็บ และเดสก์ท็อปแบบอัตโนมัติ โดยใช้โปรโตคอล WebDriver ช่วยให้คุณเขียนทดสอบในภาษาการเขียนโปรแกรมใดก็ได้และรันบน Android, iOS และ Windows โดยไม่ต้องเปลี่ยนโค้ด ตามข้อมูลจาก Appium Foundation, 2025 โปรโตคอล WebDriver มอบอินเทอร์เฟซแบบรวมสำหรับการโต้ตอบกับแอปพลิเคชันบนแพลตฟอร์มต่างๆ
ประเด็นสำคัญ
Appium คือเฟรมเวิร์กโอเพนซอร์สสำหรับการทดสอบแอปพลิเคชันมือถือแบบอัตโนมัติ สร้างบนสถาปัตยกรรมไคลเอ็นต์-เซิร์ฟเวอร์ เซิร์ฟเวอร์ Appium รับคำสั่งจากไคลเอ็นต์ผ่านโปรโตคอล WebDriver และมอบหมายให้กับไดรเวอร์ดั้งเดิม: XCUITest สำหรับ iOS, UiAutomator2 สำหรับ Android และ WinAppDriver สำหรับ Windows
Appium ถูกสร้างขึ้นในปี 2013 และตั้งแต่นั้นมาก็กลายเป็นมาตรฐานอุตสาหกรรมสำหรับการทดสอบ ข้ามแพลตฟอร์ม โปรเจกต์นี้บริหารโดย Appium Foundation และได้รับการสนับสนุนจากบริษัทใหญ่: Sauce Labs, HeadSpin, Microsoft มีผู้ทดสอบมากกว่า 500,000 คนทั่วโลกใช้ Appium ทุกเดือน
Appium รองรับแอปพลิเคชันสามประเภท: ดั้งเดิม (iOS, Android, Windows), เว็บเบราว์เซอร์มือถือ (Safari, Chrome) และแอปพลิเคชันไฮบริด (WebView ภายในเชลดั้งเดิม) แต่ละประเภทใช้บริบทของตัวเอง: NATIVE_APP, WEBVIEW หรือ CHROMIUM
สถาปัตยกรรม Appium ประกอบด้วยสี่ชั้น: โค้ดไคลเอ็นต์ → Appium Client Library → Appium Server → ไดรเวอร์ดั้งเดิม ไลบรารีไคลเอ็นต์ ใช้โปรโตคอล WebDriver และส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์แปลงเป็นคำสั่งไดรเวอร์ดั้งเดิมของแพลตฟอร์ม
WebDriver คือมาตรฐาน W3C สำหรับการทำงานอัตโนมัติของเบราว์เซอร์ ซึ่งถูกปรับโดย Appium สำหรับอุปกรณ์มือถือ แต่ละการกระทำ — การค้นหาอิลิเมนต์ การแตะ การป้อนข้อความ — จะถูกส่งเป็น คำขอ HTTP ไปยังเซิร์ฟเวอร์ ตัวอย่างเช่น POST /session/{id}/element สร้างเซสชันการทดสอบใหม่
การทดสอบแต่ละครั้งเริ่มต้นด้วยการสร้างเซสชันผ่านออบเจกต์ Desired Capabilities โดยระบุ: platformName, deviceName, appPath, automationName และพารามิเตอร์เพิ่มเติม Appium ใช้ข้อมูลนี้เพื่อเลือกไดรเวอร์ดั้งเดิมและการกำหนดค่าอุปกรณ์ที่เหมาะสม
# ตัวอย่าง Desired Capabilities สำหรับ Android
desired_caps = {
'platformName': 'Android',
'deviceName': 'Pixel_4',
'app': '/path/to/app.apk',
'automationName': 'UiAutomator2',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
ติดตั้ง Appium ผ่าน npm: npm install -g appium หลังการติดตั้ง คุณต้องกำหนดค่าไดรเวอร์ดั้งเดิมสำหรับแต่ละแพลตฟอร์ม: appium driver install xcuitest และ appium driver install uiautomator2 ต้องใช้ Xcode สำหรับ iOS และ Android SDK สำหรับ Android
Appium Inspector คือเครื่องมือกราฟิกสำหรับ ตรวจสอบ อิลิเมนต์อินเทอร์เฟซผู้ใช้ มันเชื่อมต่อกับเซิร์ฟเวอร์ Appium ที่กำลังทำงานและแสดงลำดับชั้นของส่วนประกอบ UI คุณลักษณะ และตัวระบุตำแหน่ง Inspector ช่วยให้คุณตรวจสอบตัวเลือกก่อนเขียนทดสอบ
เซิร์ฟเวอร์ Appium เริ่มต้นด้วยคำสั่ง appium พร้อมพารามิเตอร์เสริม: พอร์ต ที่อยู่ การบันทึก โดยค่าเริ่มต้น เซิร์ฟเวอร์จะฟังที่พอร์ต 4723 มีการใช้พอร์ตต่างๆ หรือคลัสเตอร์ Appium สำหรับการรันแบบขนานบนหลายอุปกรณ์
# การเริ่มเซิร์ฟเวอร์ Appium พร้อมการบันทึก
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
การทดสอบ Appium ใช้รูปแบบ Page Object เพื่อจัดระเบียบโค้ด แต่ละหน้าจอแอปถูกอธิบายด้วยคลาสแยกต่างหากพร้อมตัวระบุตำแหน่งอิลิเมนต์และวิธีการโต้ตอบ Page Object Model ช่วยลดความซับซ้อนในการบำรุงรักษาการทดสอบเมื่ออินเทอร์เฟซเปลี่ยนแปลงและใช้ตัวเลือกซ้ำระหว่างสถานการณ์การทดสอบ
Appium รองรับกลยุทธ์การค้นหาอิลิเมนต์มากมาย: id, xpath, accessibilityId, className, androidUIAutomator และ iOSClassChain ที่แนะนำมากที่สุดคือ accessibilityId และ id — มีความเสถียรแม้มีการเปลี่ยนแปลงเค้าโครง XPath ควรใช้เมื่อไม่มีตัวระบุตำแหน่งอื่นเท่านั้น
// Page Object สำหรับหน้าจอเข้าสู่ระบบ
public class LoginPage {
private AppiumDriver driver;
private MobileElement emailField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
private MobileElement passwordField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
private MobileElement loginButton =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));
public void login(String email, String password) {
emailField.sendKeys(email);
passwordField.sendKeys(password);
loginButton.click();
}
}
Appium รองรับท่าทางที่ซับซ้อนผ่านคลาส TouchAction หรือ W3C Actions API: ปัด, สัมผัสหลายจุด, กดค้าง, เลื่อนไปยังอิลิเมนต์ W3C Actions API ใหม่แนะนำสำหรับโปรเจกต์ใหม่เนื่องจากเป็นมาตรฐานและทำงานได้เสถียรกว่าบนเวอร์ชันแพลตฟอร์มต่างๆ
Appium มักถูกเปรียบเทียบกับ Detox, XCUITest และ Espresso ข้อได้เปรียบหลักของ Appium คือความสามารถ ข้ามแพลตฟอร์ม: การทดสอบหนึ่งสามารถรันบน iOS และ Android โดยไม่ต้องเปลี่ยนแปลง อย่างไรก็ตาม Detox ให้การซิงโครไนซ์ที่ดีกว่าสำหรับ React Native และ XCUITest/Espresso ให้การทำงานที่เร็วกว่าสำหรับการทดสอบดั้งเดิม
Appium เหมาะสำหรับโปรเจกต์ที่ต้องการ เฟรมเวิร์กเดียว สำหรับ iOS, Android และเว็บ มันจำเป็นในทีมที่มีผู้ทดสอบเขียนใน Java หรือ Python สำหรับโปรเจกต์ React Native ที่มีการทดสอบ E2E จำนวนมาก ให้พิจารณา Detox เนื่องจากการซิงโครไนซ์อัตโนมัติ
| เฟรมเวิร์ก | วิธีการ | ความเร็ว | ข้ามแพลตฟอร์ม |
|---|---|---|---|
| Appium | แบล็กบ็อกซ์ | ปานกลาง | iOS, Android, Windows |
| Detox | เกรย์บ็อกซ์ | สูง | iOS + Android (React Native) |
| XCUITest | ไวท์บ็อกซ์ | สูง | iOS เท่านั้น |
Appium Grid คือส่วนขยายสำหรับการรันทดสอบแบบขนานบนหลายอุปกรณ์พร้อมกัน Appium Grid สร้างบน Selenium Grid และช่วยให้กระจายการทดสอบระหว่างเซิร์ฟเวอร์ Appium หลายตัว แต่ละตัวจัดการชุดอุปกรณ์หรืออีมูเลเตอร์ของตัวเอง นี่เป็นสิ่งสำคัญสำหรับโปรเจกต์ขนาดใหญ่ที่การทดสอบการถดถอยบนอุปกรณ์เดียวใช้เวลาหลายชั่วโมง — Grid ลดเวลาเหลือไม่กี่นาทีตามสัดส่วนจำนวนโหนด
การกำหนดค่า Grid ใช้ไฟล์กำหนดค่า JSON ที่อธิบายโหนดพร้อมอุปกรณ์ แต่ละโหนดระบุ: พอร์ตเซิร์ฟเวอร์ รายการอุปกรณ์พร้อมแพลตฟอร์ม เวอร์ชันระบบปฏิบัติการ และจำนวนเซสชันสูงสุด Hub กระจายการทดสอบไปยังโหนดว่าง เพื่อให้การใช้โครงสร้างพื้นฐานสูงสุด
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
หากโครงสร้างพื้นฐานอุปกรณ์ของคุณไม่มี มีบริการคลาวด์: Sauce Labs, BrowserStack, LambdaTest ให้อุปกรณ์จริงและอีมูเลเตอร์หลายร้อยเครื่องในคลาวด์ การผสานรวมกับ Appium น้อยที่สุด: เพียงระบุ URL ฮับคลาวด์และข้อมูลรับรองใน Desired Capabilities แทน localhost
Appium รองรับการทำงานแบบขนานของการทดสอบด้วย TestNG (Java) หรือ pytest-xdist (Python) การทำขนาน ต้องการพอร์ตที่ไม่ซ้ำกันสำหรับแต่ละเซสชันและข้อมูลการทดสอบที่แยกจากกัน แต่ละเธรดเริ่มเซสชัน Appium ของตัวเองบนอุปกรณ์หรืออีมูเลเตอร์แยกต่างหาก เมื่อใช้บริการคลาวด์ การทำขนานเป็นแบบอัตโนมัติ — แพลตฟอร์มกระจายการทดสอบไปยังอุปกรณ์ที่มีและปล่อยหลังจากเสร็จสิ้น
เมื่อพบปัญหากับ Appium ขั้นตอนแรกคือตรวจสอบบันทึกเซิร์ฟเวอร์ (appium --log-level debug) ข้อผิดพลาดทั่วไป: พอร์ตไม่ว่าง (ระบุ --port อื่น), เวอร์ชันไดรเวอร์ไม่เข้ากัน, ขาด Android SDK หรือ Xcode สำหรับ iOS ตรวจสอบให้แน่ใจว่า WebKitAgent ทำงานและเข้าถึงซิมิวเลเตอร์ได้
หาก Appium ไม่พบอิลิเมนต์ ให้ตรวจสอบ: บริบทถูกต้องหรือไม่ (NATIVE_APP vs WEBVIEW), อิลิเมนต์ปรากฏบนหน้าจอหรือไม่, ต้องเลื่อนหรือไม่ และตัวระบุตำแหน่งถูกต้องหรือไม่ ใช้ Appium Inspector สำหรับการค้นหาแบบโต้ตอบและการตรวจสอบนิพจน์ XPath ก่อนแทรกในการทดสอบ การเปิดใช้งานการรอให้อิลิเมนต์ปรากฏผ่าน WebDriverWait ก็มีประโยชน์เช่นกัน — แก้ปัญหาการซิงโครไนซ์เมื่อโหลด UI ช้า
การสิ้นสุดเซสชันที่ไม่เหมาะสมเป็นสาเหตุทั่วไปของความไม่เสถียรของการทดสอบ Appium ปิดไดรเวอร์ในบล็อก finally หรือผ่าน AutoCloseable เสมอ ในกรณีที่ล้มเหลว ให้ใช้ driver.quit() แบบบังคับ สำหรับ iOS ตรวจสอบให้แน่ใจว่า WebKitAgent (WDA) รีสตาร์ทระหว่างเซสชัน มิฉะนั้นอาจเกิดข้อผิดพลาด session not created สำหรับการตรวจสอบสถานะเซสชันใน CI สะดวกในการเชื่อมต่อปลั๊กอิน Appium Dashboard ซึ่งแสดงสถานะของการทดสอบที่รันอยู่ทั้งหมดแบบเรียลไทม์
เพื่อปรับปรุงความเสถียรของการทดสอบ ให้ใช้: shouldTerminateApp (สิ้นสุดแอประหว่างการทดสอบ), noReset (เก็บข้อมูลระหว่างเซสชัน), autoGrantPermissions (อนุญาตกล่องโต้ตอบระบบโดยอัตโนมัติ) นอกจากนี้แนะนำให้ปิด แอนิเมชัน บนอุปกรณ์ผ่านตัวเลือกนักพัฒนา
คำถามที่พบบ่อย
Appium รองรับภาษายอดนิยมทั้งหมดผ่านไลบรารีไคลเอ็นต์: Java, Python, JavaScript, Ruby, C#, PHP และ Kotlin แต่ละไลบรารีใช้โปรโตคอล WebDriver เดียวกัน ช่วยให้คุณเขียนทดสอบข้ามแพลตฟอร์มในภาษาใดก็ได้
ไม่ Appium ทำงานทั้งกับอุปกรณ์จริงและอีมูเลเตอร์และซิมิวเลเตอร์ สำหรับ Android ใช้อีมูเลเตอร์ Android Studio สำหรับ iOS ใช้ซิมิวเลเตอร์ Xcode อุปกรณ์จริงจำเป็นสำหรับการทดสอบฟังก์ชันฮาร์ดแวร์เท่านั้น: เซนเซอร์, NFC, กล้อง
Appium 2 ถูกเขียนใหม่ทั้งหมดด้วย สถาปัตยกรรมแบบโมดูลาร์ พร้อมปลั๊กอินและไดรเวอร์แยกต่างหาก ใน Appium 1 ไดรเวอร์ทั้งหมดถูกสร้างในเซิร์ฟเวอร์ Appium 2 ใช้คำสั่ง appium driver install เพื่อติดตั้งไดรเวอร์และ appium plugin install สำหรับปลั๊กอิน
Appium ใช้ กลยุทธ์การค้นหา: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator และ By.iOSClassChain เพื่อความเร็ว แนะนำให้ใช้ accessibilityId — มันเสถียรและไม่ขึ้นอยู่กับการเปลี่ยนแปลงเค้าโครง
ใช่ Appium รองรับการทดสอบ เบราว์เซอร์มือถือ — Safari บน iOS และ Chrome บน Android โดยใช้บริบท WEBVIEW หรือ CHROMIUM การทดสอบทำงานในเบราว์เซอร์ผ่าน WebDriver มาตรฐาน คล้ายกับ Selenium
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม