瀏覽器物件
繼承自: EventEmitter
瀏覽器物件是您用來控制瀏覽器或行動裝置的工作階段實例。如果您使用 WDIO 測試執行器,您可以透過全域 browser
或 driver
物件存取 WebDriver 實例,或使用 @wdio/globals
匯入它。如果您在獨立模式下使用 WebdriverIO,瀏覽器物件會由 remote
方法傳回。
工作階段由測試執行器初始化。結束工作階段也是如此。這也是由測試執行器程序完成的。
屬性
瀏覽器物件具有以下屬性
名稱 | 類型 | 詳細資訊 |
---|---|---|
capabilities | 物件 | 從遠端伺服器指派的功能。 範例 { |
requestedCapabilities | 物件 | 從遠端伺服器要求的功能。 範例 { browserName: 'chrome' } |
sessionId | 字串 | 從遠端伺服器指派的工作階段 ID。 |
options | 物件 | WebdriverIO 選項,取決於瀏覽器物件的建立方式。請參閱更多設定類型。 |
commandList | 字串[] | 已註冊到瀏覽器實例的命令清單 |
isMobile | 布林值 | 指示行動工作階段。請參閱行動旗標下的更多資訊。 |
isIOS | 布林值 | 指示 iOS 工作階段。請參閱行動旗標下的更多資訊。 |
isAndroid | 布林值 | 指示 Android 工作階段。請參閱行動旗標下的更多資訊。 |
方法
根據您工作階段使用的自動化後端,WebdriverIO 會識別哪些 協定命令將附加到瀏覽器物件。例如,如果您在 Chrome 中執行自動化工作階段,您將可以存取 Chromium 特定的命令,例如 elementHover
,但不能存取任何 Appium 命令。
此外,WebdriverIO 提供了一組方便的方法,建議使用這些方法與瀏覽器或頁面上的元素互動。
除此之外,還可以使用以下命令
名稱 | 參數 | 詳細資訊 |
---|---|---|
addCommand | - commandName (類型:字串 )- fn (類型:函式 )- attachToElement (類型:布林值 ) | 允許定義可從瀏覽器物件呼叫的自訂命令,以用於組合目的。請在自訂命令指南中閱讀更多資訊。 |
overwriteCommand | - commandName (類型:字串 )- fn (類型:函式 )- attachToElement (類型:布林值 ) | 允許以自訂功能覆寫任何瀏覽器命令。請謹慎使用,因為它可能會讓架構使用者感到困惑。請在自訂命令指南中閱讀更多資訊。 |
addLocatorStrategy | - strategyName (類型:字串 )- fn (類型:函式 ) | 允許定義自訂選取器策略,請在選取器指南中閱讀更多資訊。 |
備註
行動旗標
如果您需要根據您的工作階段是否在行動裝置上執行來修改您的測試,您可以存取行動旗標來檢查。
例如,假設有這個組態
// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}
您可以在測試中存取這些旗標,如下所示
// Note: `driver` is the equivalent to the `browser` object but semantically more correct
// you can choose which global variable you want to use
console.log(driver.isMobile) // outputs: true
console.log(driver.isIOS) // outputs: true
console.log(driver.isAndroid) // outputs: false
如果例如您想根據裝置類型在頁面物件中定義選取器,這會很有用,如下所示
// 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}`)
}
// ...
}
您也可以使用這些旗標來僅針對特定裝置類型執行某些測試
// mytest.e2e.js
describe('my test', () => {
// ...
// only run test with Android devices
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})
事件
瀏覽器物件是 EventEmitter,並且會發出幾個事件供您使用。
以下是事件清單。請記住,這還不是可用事件的完整清單。歡迎您貢獻更新文件,在此處新增更多事件的說明。
command
每當 WebdriverIO 傳送 WebDriver Classic 命令時,就會發出此事件。它包含以下資訊
command
:命令名稱,例如navigateTo
method
:用來傳送命令請求的 HTTP 方法,例如POST
endpoint
:命令端點,例如/session/fc8dbda381a8bea36a225bd5fd0c069b/url
body
:命令承載,例如{ url: 'https://webdriverio.dev.org.tw' }
result
每當 WebdriverIO 收到 WebDriver Classic 命令的結果時,就會發出此事件。它包含與 command
事件相同的資訊,並新增了以下資訊
result
:命令結果
bidiCommand
每當 WebdriverIO 傳送 WebDriver Bidi 命令給瀏覽器驅動程式時,就會發出此事件。它包含有關以下項目的資訊
method
:WebDriver Bidi 命令方法params
:相關聯的命令參數(請參閱API)
bidiResult
在命令執行成功的情況下,事件承載將會是
type
:success
id
:命令 IDresult
:命令結果(請參閱API)
在命令錯誤的情況下,事件承載將會是
type
:error
id
:命令 IDerror
:錯誤碼,例如invalid argument
message
:有關錯誤的詳細資訊stacktrace
:堆疊追蹤
request.performance
這是用於測量 WebDriver 層級操作的事件。每當 WebdriverIO 將請求傳送至 WebDriver 後端時,就會發出此事件,其中包含一些有用的資訊
durationMillisecond
:請求的持續時間(以毫秒為單位)。error
:如果請求失敗,則為錯誤物件。request
:請求物件。您可以找到 url、方法、標頭等。retryCount
:如果它是0
,則表示該請求是第一次嘗試。當 WebdriverIO 在幕後重試時,它將會增加。success
:布林值,表示請求是否成功。如果它是false
,則也會提供error
屬性。
範例事件
Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},
自訂命令
您可以在瀏覽器範圍設定自訂命令,以抽象化常用的工作流程。請參閱我們的自訂命令指南以獲取更多資訊。