Đối tượng Trình duyệt
Mở rộng từ: EventEmitter
Đối tượng trình duyệt là phiên làm việc mà bạn sử dụng để điều khiển trình duyệt hoặc thiết bị di động. Nếu bạn sử dụng trình chạy kiểm thử WDIO, bạn có thể truy cập thể hiện WebDriver thông qua đối tượng toàn cục browser
hoặc driver
hoặc nhập nó bằng cách sử dụng @wdio/globals
. Nếu bạn sử dụng WebdriverIO ở chế độ độc lập, đối tượng trình duyệt được trả về bởi phương thức remote
.
Phiên làm việc được khởi tạo bởi trình chạy kiểm thử. Tương tự, việc kết thúc phiên cũng được thực hiện bởi tiến trình của trình chạy kiểm thử.
Thuộc tính
Một đối tượng trình duyệt có các thuộc tính sau:
Tên | Kiểu | Chi tiết |
---|---|---|
capabilities | Object | Các khả năng được gán từ máy chủ từ xa. Ví dụ: { |
requestedCapabilities | Object | Các khả năng yêu cầu từ máy chủ từ xa. Ví dụ: { browserName: 'chrome' } |
sessionId | String | ID phiên được gán từ máy chủ từ xa. |
options | Object | Tùy chọn WebdriverIO tùy thuộc vào cách đối tượng trình duyệt được tạo. Xem thêm các loại thiết lập. |
commandList | String[] | Danh sách các lệnh đã đăng ký cho thể hiện trình duyệt |
isW3C | Boolean | Chỉ ra nếu đây là phiên W3C |
isChrome | Boolean | Chỉ ra nếu đây là thể hiện Chrome |
isFirefox | Boolean | Chỉ ra nếu đây là thể hiện Firefox |
isBidi | Boolean | Chỉ ra nếu phiên này sử dụng Bidi |
isSauce | Boolean | Chỉ ra nếu phiên này đang chạy trên Sauce Labs |
isMacApp | Boolean | Chỉ ra nếu phiên này đang chạy cho ứng dụng Mac gốc |
isWindowsApp | Boolean | Chỉ ra nếu phiên này đang chạy cho ứng dụng Windows gốc |
isMobile | Boolean | Chỉ ra một phiên di động. Xem thêm trong Cờ Di động. |
isIOS | Boolean | Chỉ ra một phiên iOS. Xem thêm trong Cờ Di động. |
isAndroid | Boolean | Chỉ ra một phiên Android. Xem thêm trong Cờ Di động. |
isNativeContext | Boolean | Chỉ ra nếu thiết bị di động đang ở trong bối cảnh NATIVE_APP . Xem thêm trong Cờ Di động. |
mobileContext | string | Sẽ cung cấp bối cảnh hiện tại mà trình điều khiển đang sử dụng, ví dụ NATIVE_APP , WEBVIEW_<packageName> cho Android hoặc WEBVIEW_<pid> cho iOS. Nó sẽ lưu một WebDriver bổ sung vào driver.getContext() . Xem thêm trong Cờ Di động. |
Phương thức
Dựa trên nền tảng tự động hóa được sử dụng cho phiên của bạn, WebdriverIO xác định Lệnh Giao thức nào sẽ được gắn vào đối tượng trình duyệt. Ví dụ, nếu bạn chạy một phiên tự động trong Chrome, bạn sẽ có quyền truy cập vào các lệnh dành riêng cho Chromium như elementHover
nhưng không phải bất kỳ lệnh Appium nào.
Hơn nữa, WebdriverIO cung cấp một bộ phương thức tiện lợi được khuyến nghị sử dụng để tương tác với trình duyệt hoặc các phần tử trên trang.
Ngoài ra, các lệnh sau đây cũng có sẵn:
Tên | Tham số | Chi tiết |
---|---|---|
addCommand | - commandName (Kiểu: String )- fn (Kiểu: Function )- attachToElement (Kiểu: boolean ) | Cho phép định nghĩa các lệnh tùy chỉnh có thể được gọi từ đối tượng trình duyệt cho mục đích kết hợp. Đọc thêm trong hướng dẫn Lệnh Tùy chỉnh. |
overwriteCommand | - commandName (Kiểu: String )- fn (Kiểu: Function )- attachToElement (Kiểu: boolean ) | Cho phép ghi đè bất kỳ lệnh trình duyệt nào bằng chức năng tùy chỉnh. Sử dụng cẩn thận vì nó có thể gây nhầm lẫn cho người dùng framework. Đọc thêm trong hướng dẫn Lệnh Tùy chỉnh. |
addLocatorStrategy | - strategyName (Kiểu: String )- fn (Kiểu: Function ) | Cho phép định nghĩa một chiến lược bộ chọn tùy chỉnh, đọc thêm trong hướng dẫn Bộ chọn. |
Ghi chú
Cờ Di động
Nếu bạn cần sửa đổi bài kiểm thử của mình dựa trên việc phiên của bạn có đang chạy trên thiết bị di động hay không, bạn có thể truy cập các cờ di động để kiểm tra.
Ví dụ, với cấu hình này:
// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}
Bạn có thể truy cập các cờ này trong bài kiểm thử của mình như sau:
// Lưu ý: `driver` tương đương với đối tượng `browser` nhưng về mặt ngữ nghĩa chính xác hơn
// bạn có thể chọn biến toàn cục nào bạn muốn sử dụng
console.log(driver.isMobile) // xuất ra: true
console.log(driver.isIOS) // xuất ra: true
console.log(driver.isAndroid) // xuất ra: false
Điều này có thể hữu ích nếu, ví dụ, bạn muốn định nghĩa bộ chọn trong page objects dựa trên loại thiết bị, như thế này:
// mypageobject.page.js
import Page from './page'
class LoginPage extends Page {
// ...
get username() {
const selectorAndroid = 'new UiSelector().text("Cancel").className("android.widget.Button")'
const selectorIOS = 'UIATarget.localTarget().frontMostApp().mainWindow().buttons()[0]'
const selectorType = driver.isAndroid ? 'android' : 'ios'
const selector = driver.isAndroid ? selectorAndroid : selectorIOS
return $(`${selectorType}=${selector}`)
}
// ...
}
Bạn cũng có thể sử dụng các cờ này để chỉ chạy các bài kiểm thử nhất định cho các loại thiết bị nhất định:
// mytest.e2e.js
describe('my test', () => {
// ...
// chỉ chạy kiểm thử với thiết bị Android
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})
Sự kiện
Đối tượng trình duyệt là một EventEmitter và một số sự kiện được phát ra cho các trường hợp sử dụng của bạn.
Dưới đây là danh sách các sự kiện. Hãy nhớ rằng đây chưa phải là danh sách đầy đủ các sự kiện có sẵn. Hãy thoải mái đóng góp để cập nhật tài liệu bằng cách thêm mô tả của nhiều sự kiện hơn tại đây.
command
Sự kiện này được phát ra bất cứ khi nào WebdriverIO gửi một lệnh WebDriver Classic. Nó chứa những thông tin sau:
command
: tên lệnh, ví dụ:navigateTo
method
: phương thức HTTP được sử dụng để gửi yêu cầu lệnh, ví dụ:POST
endpoint
: điểm cuối của lệnh, ví dụ:/session/fc8dbda381a8bea36a225bd5fd0c069b/url
body
: payload của lệnh, ví dụ:{ url: 'https://webdriver.io' }
result
Sự kiện này được phát ra bất cứ khi nào WebdriverIO nhận được kết quả của một lệnh WebDriver Classic. Nó chứa cùng thông tin như sự kiện command
với bổ sung các thông tin sau:
result
: kết quả của lệnh
bidiCommand
Sự kiện này được phát ra bất cứ khi nào WebdriverIO gửi một lệnh WebDriver Bidi đến trình điều khiển trình duyệt. Nó chứa thông tin về:
method
: phương thức lệnh WebDriver Bidiparams
: tham số lệnh liên quan (xem API)
bidiResult
Trong trường hợp thực thi lệnh thành công, payload sự kiện sẽ là:
type
:success
id
: id của lệnhresult
: kết quả của lệnh (xem API)
Trong trường hợp lỗi lệnh, payload sự kiện sẽ là:
type
:error
id
: id của lệnherror
: mã lỗi, ví dụ:invalid argument
message
: chi tiết về lỗistacktrace
: một stack trace
request.start
Sự kiện này được kích hoạt trước khi một yêu cầu WebDriver được gửi đến trình điều khiển. Nó chứa thông tin về yêu cầu và payload của nó.
browser.on('request.start', (ev: RequestInit) => {
// ...
})
request.end
Sự kiện này được kích hoạt khi yêu cầu đến trình điều khiển nhận được phản hồi. Đối tượng sự kiện chứa nội dung phản hồi như kết quả hoặc lỗi nếu lệnh WebDriver thất bại.
browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})
request.retry
Sự kiện retry có thể thông báo cho bạn khi WebdriverIO cố gắng thử lại việc chạy lệnh, ví dụ: do vấn đề mạng. Nó chứa thông tin về lỗi gây ra việc thử lại và số lần thử lại đã thực hiện.
browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})
request.performance
Đây là một sự kiện để đo lường các hoạt động cấp WebDriver. Bất cứ khi nào WebdriverIO gửi yêu cầu đến backend WebDriver, sự kiện này sẽ được phát ra với một số thông tin hữu ích:
durationMillisecond
: Thời gian của yêu cầu tính bằng mili giây.error
: Đối tượng lỗi nếu yêu cầu thất bại.request
: Đối tượng yêu cầu. Bạn có thể tìm thấy url, method, headers, v.v.retryCount
: Nếu là0
, yêu cầu là lần thử đầu tiên. Nó sẽ tăng khi WebDriverIO thử lại ngầm.success
: Boolean để biểu thị yêu cầu thành công hay không. Nếu làfalse
, thuộc tínherror
cũng sẽ được cung cấp.
Một ví dụ về sự kiện:
Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},
Lệnh Tùy chỉnh
Bạn có thể thiết lập các lệnh tùy chỉnh trong phạm vi trình duyệt để trừu tượng hóa các quy trình làm việc thường được sử dụng. Hãy xem hướng dẫn của chúng tôi về Lệnh Tùy chỉnh để biết thêm thông tin.