ブラウザオブジェクト
継承元: EventEmitter
ブラウザオブジェクトは、ブラウザまたはモバイルデバイスを制御するために使用するセッションインスタンスです。WDIOテストランナーを使用する場合、グローバルなbrowser
またはdriver
オブジェクトを通じて、または@wdio/globals
を使用してインポートすることでWebDriverインスタンスにアクセスできます。WebdriverIOをスタンドアロンモードで使用する場合、ブラウザオブジェクトはremote
メソッドによって返されます。
セッションはテストランナーによって初期化されます。同様に、セッションの終了もテストランナープロセスによって行われます。
プロパティ
ブラウザオブジェクトには以下のプロパティがあります:
名前 | 型 | 詳細 |
---|---|---|
capabilities | Object | リモートサーバーから割り当てられた機能。 例: { |
requestedCapabilities | Object | リモートサーバーに要求された機能。 例: { browserName: 'chrome' } |
sessionId | String | リモートサーバーから割り当てられたセッションID。 |
options | Object | ブラウザオブジェクトがどのように作成されたかに応じたWebdriverIO オプション。詳細はセットアップの種類を参照。 |
commandList | String[] | ブラウザインスタンスに登録されたコマンドのリスト |
isW3C | Boolean | これがW3Cセッションであるかどうかを示す |
isChrome | Boolean | これがChromeインスタンスであるかどうかを示す |
isFirefox | Boolean | これがFirefoxインスタンスであるかどうかを示す |
isBidi | Boolean | このセッションがBidiを使用しているかどうかを示す |
isSauce | Boolean | このセッションがSauce Labs上で実行されているかどうかを示す |
isMacApp | Boolean | このセッションがネイティブMacアプリ用に実行されているかどうかを示す |
isWindowsApp | Boolean | このセッションがネイティブWindowsアプリ用に実行されているかどうかを示す |
isMobile | Boolean | モバイルセッションであることを示す。詳細はモバイルフラグを参照。 |
isIOS | Boolean | iOSセッションであることを示す。詳細はモバイルフラグを参照。 |
isAndroid | Boolean | Androidセッションであることを示す。詳細はモバイルフラグを参照。 |
isNativeContext | Boolean | モバイルがNATIVE_APP コンテキストにあるかどうかを示す。詳細はモバイルフラグを参照。 |
mobileContext | string | ドライバーが現在いるコンテキストを提供します。例えば、NATIVE_APP 、Androidの場合はWEBVIEW_<packageName> 、iOSの場合はWEBVIEW_<pid> 。これはdriver.getContext() への余分なWebDriverの呼び出しを節約します。詳細はモバイルフラグを参照。 |
メソッド
セッションに使用される自動化バックエンドに基づいて、WebdriverIOはブラウザオブジェクトにアタッチされるプロトコルコマンドを識別します。例えば、Chromeで自動化セッションを実行する場合、elementHover
のようなChromium固有のコマンドにアクセスできますが、Appiumコマンドにはアクセスできません。
さらに、WebdriverIOはページ上のブラウザやエレメントと対話するための便利なメソッドセットを提供しています。
さらに、以下のコマンドも利用可能です:
名前 | パラメータ | 詳細 |
---|---|---|
addCommand | - commandName (タイプ: String )- fn (タイプ: Function )- attachToElement (タイプ: boolean ) | コンポジション目的でブラウザオブジェクトから呼び出せるカスタムコマンドを定義できます。カスタムコマンドガイドで詳細を確認してください。 |
overwriteCommand | - commandName (タイプ: String )- fn (タイプ: Function )- attachToElement (タイプ: boolean ) | 任意のブラウザコマンドをカスタム機能で上書きすることができます。フレームワークユーザーを混乱させる可能性があるため、慎重に使用してください。カスタムコマンドガイドで詳細を確認してください。 |
addLocatorStrategy | - strategyName (タイプ: String )- fn (タイプ: Function ) | カスタムセレクタ戦略を定義できます。セレクタガイドで詳細を確認してください。 |
備考
モバイルフラグ
セッションがモバイルデバイス上で実行されているかどうかに基づいてテストを変更する必要がある場合、モバイルフラグをチェックできます。
例えば、この設定を考えてみましょう:
// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}
テスト内でこれらのフラグにこのようにアクセスできます:
// 注意:`driver`は`browser`オブジェクトと同等ですが、意味的にはより正確です
// 使用したいグローバル変数を選択できます
console.log(driver.isMobile) // 出力:true
console.log(driver.isIOS) // 出力:true
console.log(driver.isAndroid) // 出力: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', () => {
// ...
// Androidデバイスでのみテストを実行
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://webdriver.io' }
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.start
このイベントは、WebDriverリクエストがドライバーに送信される前に発行されます。リクエストとそのペイロードに関する情報が含まれています。
browser.on('request.start', (ev: RequestInit) => {
// ...
})
request.end
このイベントは、ドライバーへのリクエストがレスポンスを受信したときに発行されます。イベントオブジェクトには、結果としてレスポンスボディ、またはWebDriverコマンドが失敗した場合はエラーが含まれます。
browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})
request.retry
リトライイベントは、WebdriverIOがネットワーク問題などによりコマンドの実行を再試行する場合に通知します。これには、リトライの原因となったエラーと既に実行されたリトライの回数に関する情報が含まれています。
browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})
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,
},
カスタムコマンド
一般的に使用されるワークフローを抽象化するために、ブラウザスコープにカスタムコマンドを設定できます。詳細については、カスタムコマンドのガイドをご覧ください。