Câu hỏi thường gặp
Câu hỏi thường gặp về WebdriverIO MCP.
Tổng quan
MCP là gì?
MCP (Model Context Protocol) là một giao thức mở cho phép trợ lý AI như Claude tương tác với các công cụ và dịch vụ bên ngoài. WebdriverIO MCP triển khai giao thức này để cung cấp khả năng tự động hóa trình duyệt và thiết bị di động cho Claude Desktop và Claude Code.
Tôi có thể tự động hóa những gì với WebdriverIO MCP?
Bạn có thể tự động hóa:
- Trình duyệt máy tính (Chrome) - điều hướng, nhấp chuột, nhập liệu, chụp màn hình
- Ứng dụng iOS - trên giả lập hoặc thiết bị thực
- Ứng dụng Android - trên giả lập hoặc thiết bị thực
- Ứng dụng Hybrid - chuyển đổi giữa ngữ cảnh native và web
Tôi có cần viết mã không?
Không! Đó là lợi ích chính của MCP. Bạn có thể mô tả những gì bạn muốn làm bằng ngôn ngữ tự nhiên, và Claude sẽ sử dụng các công cụ thích hợp để hoàn thành nhiệm vụ.
Ví dụ về lệnh:
- "Mở Chrome và điều hướng đến webdriver.io"
- "Nhấp vào nút Get Started"
- "Chụp ảnh màn hình trang hiện tại"
- "Khởi động ứng dụng iOS của tôi và đăng nhập với tài khoản test"
Cài đặt & Thiết lập
Làm thế nào để cài đặt WebdriverIO MCP?
Bạn không cần cài đặt riêng. MCP server tự động chạy thông qua npx khi bạn cấu hình nó trong Claude Desktop hoặc Claude Code.
Thêm đoạn này vào cấu hình Claude Desktop của bạn:
{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"]
}
}
}
File cấu hình Claude Desktop ở đâu?
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Tôi có cần Appium để tự động hóa trình duyệt không?
Không. Tự động hóa trình duyệt chỉ yêu cầu Chrome được cài đặt. WebdriverIO tự động xử lý ChromeDriver.
Tôi có cần Appium để tự động hóa thiết bị di động không?
Có. Tự động hóa thiết bị di động yêu cầu:
- Appium server đang chạy (
npm install -g appium && appium) - Driver cho nền tảng đã được cài đặt (
appium driver install xcuitestcho iOS,appium driver install uiautomator2cho Android) - Công cụ phát triển phù hợp (Xcode cho iOS, Android SDK cho Android)
Tự động hóa trình duyệt
Trình duyệt nào được hỗ trợ?
Hiện tại, chỉ Chrome được hỗ trợ. Hỗ trợ cho các trình duyệt khác có thể được thêm vào trong các phiên bản tương lai.
Tôi có thể chạy Chrome ở chế độ headless không?
Có! Yêu cầu Claude khởi động trình duyệt ở chế độ headless:
"Khởi động Chrome ở chế độ headless"
Hoặc Claude sẽ sử dụng tùy chọn này khi thích hợp (ví dụ: trong ngữ cảnh CI/CD).
Tôi có thể đặt kích thước cửa sổ trình duyệt không?
Có. Bạn có thể chỉ định kích thước khi khởi động trình duyệt:
"Khởi động Chrome với kích thước cửa sổ 1920x1080"
Kích thước được hỗ trợ: rộng 400-3840 pixel, cao 400-2160 pixel. Mặc định là 1920x1080.
Tôi có thể khởi động trình duyệt và điều hướng trong một bước không?
Có! Sử dụng tham số navigationUrl:
"Khởi động Chrome và điều hướng đến https://webdriver.io"
Điều này hiệu quả hơn việc khởi động trình duyệt và sau đó điều hướng riêng biệt.
Làm thế nào để chụp ảnh màn hình?
Đơn giản là yêu cầu Claude:
"Chụp ảnh màn hình trang hiện tại"
Ảnh chụp màn hình được tự động tối ưu hóa:
- Kích thước tối đa 2000px
- Nén tối đa 1MB
- Định dạng: PNG hoặc JPEG (tự động chọn để chất lượng tối ưu)
Tôi có thể tương tác với iframe không?
Hiện tại, MCP server hoạt động trên tài liệu chính. Tương tác iframe có thể được thêm vào trong các phiên bản tương lai.
Tôi có thể thực thi JavaScript tùy chỉnh không?
Có! Sử dụng công cụ execute_script:
"Thực thi script để lấy tiêu đề trang" "Thực thi script: return document.querySelectorAll('button').length"
Tự động hóa thiết bị di động
Làm thế nào để khởi động một ứng dụng iOS?
Yêu cầu Claude với các chi tiết cần thiết:
"Khởi động ứng dụng iOS của tôi tại /path/to/MyApp.app trên giả lập iPhone 15"
Hoặc đối với ứng dụng đã cài đặt:
"Khởi động ứng dụng với noReset được bật trên giả lập iPhone 15"
Làm thế nào để khởi động một ứng dụng Android?
"Khởi động ứng dụng Android của tôi tại /path/to/app.apk trên giả lập Pixel 7"
Hoặc đối với ứng dụng đã cài đặt:
"Khởi động ứng dụng với noReset được bật trên giả lập Pixel 7"
Tôi có thể kiểm tra trên thiết bị thực không?
Có! Đối với thiết bị thực, bạn cần UDID của thiết bị:
- iOS: Kết nối thiết bị, mở Finder, nhấp vào thiết bị, nhấp vào số sê-ri để hiển thị UDID
- Android: Chạy
adb devicestrong terminal
Sau đó yêu cầu Claude:
"Khởi động ứng dụng iOS của tôi trên thiết bị thực có UDID abc123..."
Làm thế nào để xử lý các hộp thoại quyền?
Mặc định, các quyền được tự động cấp (autoGrantPermissions: true). Nếu bạn cần kiểm tra các luồng quyền, bạn có thể tắt tính năng này:
"Khởi động ứng dụng của tôi mà không tự động cấp quyền"
Những cử chỉ nào được hỗ trợ?
- Tap: Nhấn vào các phần tử hoặc tọa độ
- Swipe: Vuốt lên, xuống, trái, phải
- Drag and Drop: Kéo từ phần tử này sang phần tử khác hoặc đến tọa độ
Lưu ý: long_press có sẵn thông qua execute_script với các lệnh di động của Appium.
Làm thế nào để cuộn trong ứng dụng di động?
Sử dụng cử chỉ vuốt:
"Vuốt lên để cuộn xuống" "Vuốt xuống để cuộn lên"
Tôi có thể xoay thiết bị không?
Có:
"Xoay thiết bị sang ngang" "Xoay thiết bị sang dọc"
Làm thế nào để xử lý ứng dụng hybrid?
Đối với các ứng dụng có webviews, bạn có thể chuyển đổi ngữ cảnh:
"Lấy các ngữ cảnh có sẵn" "Chuyển sang ngữ cảnh webview" "Chuyển lại ngữ cảnh native"
Tôi có thể thực hiện các lệnh di động của Appium không?
Có! Sử dụng công cụ execute_script:
Execute script "mobile: pressKey" with args [{ keycode: 4 }] // Nhấn BACK trên Android
Execute script "mobile: activateApp" with args [{ appId: "com.example.app" }]
Execute script "mobile: terminateApp" with args [{ bundleId: "com.example.app" }]
Lựa chọn phần tử
Làm thế nào Claude biết phần tử nào để tương tác?
Claude sử dụng công cụ get_visible_elements để xác định các phần tử tương tác trên trang/màn hình. Mỗi phần tử đi kèm với nhiều chiến lược chọn.
Điều gì xảy ra nếu có quá nhiều phần tử trên trang?
Sử dụng phân trang để quản lý danh sách phần tử lớn:
"Lấy 20 phần tử hiển thị đầu tiên" "Lấy phần tử hiển thị với offset 20 và limit 20"
Phản hồi bao gồm total, showing, và hasMore để giúp điều hướng qua các phần tử.
Tôi có thể lấy chỉ các loại phần tử cụ thể không?
Có! Sử dụng tham số elementType:
interactable(mặc định): Nút, liên kết, đầu vàovisual: Hình ảnh, SVGall: Cả hai loại
"Lấy các phần tử hiển thị trực quan trên trang"
Điều gì xảy ra nếu Claude nhấp vào phần tử sai?
Bạn có thể cụ thể hơn:
- Cung cấp văn bản chính xác: "Nhấp vào nút có nội dung 'Submit Order'"
- Cung cấp bộ chọn: "Nhấp vào phần tử có bộ chọn #submit-btn"
- Cung cấp ID khả năng truy cập: "Nhấp vào phần tử có ID khả năng truy cập loginButton"
Chiến lược chọn nào tốt nh ất cho thiết bị di động?
- Accessibility ID (tốt nhất) -
~loginButton - Resource ID (Android) -
id=login_button - Predicate String (iOS) -
-ios predicate string:label == "Login" - XPath (phương án cuối cùng) - chậm hơn nhưng hoạt động ở mọi nơi
Cây khả năng truy cập là gì và khi nào nên sử dụng nó?
Cây khả năng truy cập cung cấp thông tin ngữ nghĩa về các phần tử trang (vai trò, tên, trạng thái). Sử dụng get_accessibility khi:
get_visible_elementskhông trả về các phần tử mong đợi- Bạn cần tìm phần tử theo vai trò khả năng truy cập (nút, liên kết, hộp văn bản, v.v.)
- Bạn cần thông tin ngữ nghĩa chi tiết về các phần tử
"Lấy cây khả năng truy cập lọc theo vai trò nút và liên kết"
Quản lý phiên
Tôi có thể có nhiều phiên cùng lúc không?
Không. MCP server sử dụng mô hình đơn phiên. Chỉ một phiên trình duyệt hoặc ứng dụng có thể hoạt động tại một thời điểm.
Điều gì xảy ra khi tôi đóng một phiên?
Điều đó phụ thuộc vào loại phiên và cài đặt:
- Trình duyệt: Chrome đóng hoàn toàn
- Thiết bị di động với
noReset: false: Ứng dụng kết thúc - Thiết bị di động với
noReset: truehoặc không cóappPath: Ứng dụng vẫn mở (phiên tự động tách)