WebDriverAgent: máy chủ WebDriver cho iOS và tvOS
WebDriverAgent là máy chủ WebDriver mà XCUITest driver của Appium chạy ngay trên thiết bị để tự động hóa ứng dụng iOS và tvOS. Nó liên kết trực tiếp với XCTest.framework của Apple thay vì giả lập thao tác từ bên ngoài, đó cũng là lý do Appium xây dựng dựa trên nó thay vì vòng qua nó. Nên dùng nếu bạn cần hiểu hoặc gỡ lỗi phần Appium chạy trên thiết bị; nên bỏ qua nếu muốn một công cụ độc lập, vì hầu như không ai điều khiển nó trực tiếp.
WebDriverAgent là gì?
WebDriverAgent là máy chủ WebDriver cho iOS, điều khiển từ xa thiết bị iOS và tvOS — mở và tắt ứng dụng, chạm và cuộn màn hình, kiểm tra xem một view có đang hiển thị hay không. Nó liên kết trực tiếp với XCTest.framework của Apple và gọi thẳng API của Apple trên thiết bị, thay vì giả lập thao tác từ bên ngoài. Appium chọn WebDriverAgent làm lõi cho XCUITest driver của mình, và đó là cách phần lớn lập trình viên dùng nó.
Năng lực cốt lõi
- ✓Tự động hóa cả iOS lẫn tvOS, trên thiết bị thật lẫn trình mô phỏng.
- ✓Triển khai phần lớn W3C WebDriver Spec, nên các lệnh WebDriver chuẩn được ánh xạ thành thao tác thật trên thiết bị.
- ✓Triển khai một phần Mobile JSON Wire Protocol Spec để tương thích với các công cụ kiểm thử di động cũ hơn.
- ✓Xử lý giao tiếp qua USB bằng thư viện appium-ios-device, không phụ thuộc công cụ bên thứ ba nào cho phần này.
- ✓Chạy và gỡ lỗi như một test target trong Xcode (WebDriverAgentRunner), nên bạn đặt breakpoint ngay trong Xcode thay vì dùng công cụ debug riêng.
- ✓Kết hợp với Mac2Driver để mở rộng tự động hóa sang ứng dụng macOS.
Các trường hợp sử dụng chính
- •Kiểm thử end-to-end cho ứng dụng iOS và tvOS — thao tác qua các luồng người dùng thật và kiểm tra trạng thái hiển thị trên màn hình.
- •Tự động hóa thiết bị nói chung ngoài phạm vi kiểm thử, như mở ứng dụng theo kịch bản hoặc thao tác giao diện cho các công cụ khác.
- •Làm lớp driver trên thiết bị bên dưới Appium, khi đội ngũ viết test qua XCUITest driver của Appium thay vì gọi thẳng WebDriverAgent.
- •Gỡ lỗi cục bộ hành vi tự động hóa thiết bị bằng cách chạy thẳng target WebDriverAgentRunner từ Xcode.
Bắt đầu
Clone repo và đảm bảo đã cài Node.js trước — công cụ build của dự án cần Node.js dù phần vận hành thực tế là Objective-C. Sau đó mở WebDriverAgent.xcodeproj bằng Xcode và chạy test target WebDriverAgentRunner; thao tác này khởi động máy chủ và bạn gửi request tới nó qua HTTP (README dẫn sang wiki của dự án để xem đúng định dạng request). Nếu cần bản build có thể phân phối thay vì chạy trực tiếp từ Xcode, lệnh `npm run bundle` sẽ tạo ra file WebDriverAgentRunner-Runner-sim-<version>.zip cho iOS và WebDriverAgentRunner-Runner-tv_sim-<version>.zip cho tvOS. Ngoài phần này, README đẩy phần lớn chi tiết cấu hình — như ký ứng dụng (code signing) — sang wiki, nên xem như phần cấu hình sâu hơn không được tài liệu hóa rõ ràng trong repo.
Chạy và gỡ lỗi
Khi WebDriverAgentRunner đã chạy, bạn điều khiển nó bằng cách gửi request giống như với bất kỳ máy chủ WebDriver nào — README dẫn link sang wiki để xem đúng định dạng truy vấn thay vì mô tả ngay trong repo. Việc gỡ lỗi diễn ra đúng như bạn kỳ vọng với một project Xcode: đặt breakpoint trong WebDriverAgentRunner và chạy từng bước trực tiếp, thay vì gắn một trình debug riêng vào một tiến trình kiểu hộp đen. Khi có sự cố, hướng dẫn đầu tiên trong README là kiểm tra trang Common Issues trên wiki của dự án trước khi báo lỗi mới.
Điểm mạnh
- ✓Giao tiếp thiết bị qua USB đi qua appium-ios-device, không phụ thuộc công cụ bên thứ ba nào cho riêng phần này.
- ✓Bạn gỡ lỗi nó như bất kỳ project Xcode nào khác — đặt breakpoint trong WebDriverAgentRunner và chạy từng bước, thay vì coi máy chủ như một hộp đen.
- ✓Một codebase bao phủ cả iOS lẫn tvOS, cả thiết bị thật lẫn trình mô phỏng.
- ✓Đây chính là lớp mà XCUITest driver của Appium chạy trên đó, nên hiểu hành vi của WebDriverAgent cũng là hiểu những gì bạn thấy khi dùng qua Appium.
Vấn đề đã biết và các phụ thuộc
- △Chi tiết cài đặt và xử lý sự cố nằm chủ yếu trên wiki của dự án chứ không phải trong README, nên để chạy được lần đầu bạn phải nhảy qua lại giữa repo và các trang wiki bên ngoài.
- △WebDriverAgent đưa thẳng hai thư viện máy chủ HTTP bên thứ ba, CocoaHTTPServer và RoutingHTTPServer, vào cây mã nguồn của mình vì hai dự án gốc đó đã ngừng được bảo trì — bạn kế thừa nguyên phần mã đó thay vì được vá lỗi từ upstream.
- △Theo mô tả của chính dự án, WebDriverAgent chỉ triển khai 'phần lớn' WebDriver Spec và một phần Mobile JSON Wire Protocol Spec, nên một số lệnh trong cả hai spec có thể chưa được hỗ trợ.
- △Nó được xây trên XCTest.framework và Xcode của Apple, nên không có cách nào chạy nó ngoài toolchain của Apple.
Công cụ tương tự cho tự động hóa iOS
Câu hỏi thường gặp
WebDriverAgent hỗ trợ iOS và tvOS, trên cả thiết bị thật lẫn trình mô phỏng.
WebDriverAgent triển khai phần lớn W3C WebDriver Spec cùng một phần Mobile JSON Wire Protocol Spec, nên không phủ hết toàn bộ hai đặc tả này.
WebDriverAgent giao tiếp với thiết bị kết nối qua USB thông qua thư viện appium-ios-device, và phần này không phụ thuộc công cụ bên thứ ba nào.
WebDriverAgent phát hành theo giấy phép BSD, theo file LICENSE trong repo, nên bạn có thể nhúng nó vào công cụ kiểm thử mã nguồn mở lẫn thương mại nội bộ mà không bị ràng buộc copyleft.
WebDriverAgent tích hợp với Appium bằng cách chạy làm máy chủ trên thiết bị bên dưới XCUITest driver của Appium — đây cũng là cách phần lớn lập trình viên sử dụng nó.
README chỉ đến trang Common Issues trên wiki của dự án như điểm dừng đầu tiên cho các vấn đề đã biết, thay vì liệt kê chúng ngay trong repo.
Vấn đề mà nó giải quyết
iOS không có sẵn cách để một tiến trình bên ngoài nói chuyện WebDriver với ứng dụng theo kiểu trình duyệt vẫn làm — thiết bị không tự mang theo máy chủ điều khiển từ xa nào. WebDriverAgent lấp đúng khoảng trống đó: nó liên kết với XCTest.framework và đưa ra những gì nó làm được (mở/tắt ứng dụng, chạm, cuộn, kiểm tra view có hiển thị hay không) qua một giao diện HTTP theo kiểu WebDriver, chính là cầu nối mà Appium cần để hỗ trợ iOS thật sự qua XCUITest driver, thay vì phải tự xây một agent trên thiết bị từ đầu.
Nên dùng khi nào — và nên bỏ qua khi nào
Hãy thử WebDriverAgent nếu bạn đã tự động hóa iOS qua Appium và muốn hiểu, mở rộng hoặc gỡ lỗi lớp mà XCUITest driver dựa vào, hoặc nếu bạn đang xây công cụ cần điều khiển trực tiếp trên thiết bị theo kiểu WebDriver mà không qua lớp trừu tượng của Appium. Bỏ qua nó nếu bạn chỉ muốn viết và chạy test giao diện iOS — hãy cài Appium (hoặc viết XCUITest trực tiếp) và để nó lo phần quản lý WebDriverAgent, vì tự xử lý project Xcode, việc ký ứng dụng, và phần cài đặt chỉ được tài liệu hóa trên wiki của WebDriverAgent là nhiều việc lặt vặt hơn mức phần lớn người viết test cần đụng tới.
