メインコンテンツにスキップ

ブラウザオブジェクト

継承元: EventEmitter

ブラウザオブジェクトは、ブラウザまたはモバイルデバイスを制御するために使用するセッションインスタンスです。WDIOテストランナーを使用する場合、グローバルなbrowserまたはdriverオブジェクトを通じて、または@wdio/globalsを使用してインポートすることでWebDriverインスタンスにアクセスできます。WebdriverIOをスタンドアロンモードで使用する場合、ブラウザオブジェクトはremoteメソッドによって返されます。

セッションはテストランナーによって初期化されます。同様に、セッションの終了もテストランナープロセスによって行われます。

プロパティ

ブラウザオブジェクトには以下のプロパティがあります:

名前詳細
capabilitiesObjectリモートサーバーから割り当てられた機能。
例:
{
acceptInsecureCerts: false,
browserName: 'chrome',
browserVersion: '105.0.5195.125',
chrome: {
chromedriverVersion: '105.0.5195.52',
userDataDir: '/var/folders/3_/pzc_f56j15vbd9z3r0j050sh0000gn/T/.com.google.Chrome.76HD3S'
},
'goog:chromeOptions': { debuggerAddress: 'localhost:64679' },
networkConnectionEnabled: false,
pageLoadStrategy: 'normal',
platformName: 'mac os x',
proxy: {},
setWindowRect: true,
strictFileInteractability: false,
timeouts: { implicit: 0, pageLoad: 300000, script: 30000 },
unhandledPromptBehavior: 'dismiss and notify',
'webauthn:extension:credBlob': true,
'webauthn:extension:largeBlob': true,
'webauthn:virtualAuthenticators': true
}
requestedCapabilitiesObjectリモートサーバーに要求された機能。
例:
{ browserName: 'chrome' }
sessionIdStringリモートサーバーから割り当てられたセッションID。
optionsObjectブラウザオブジェクトがどのように作成されたかに応じたWebdriverIO オプション。詳細はセットアップの種類を参照。
commandListString[]ブラウザインスタンスに登録されたコマンドのリスト
isW3CBooleanこれがW3Cセッションであるかどうかを示す
isChromeBooleanこれがChromeインスタンスであるかどうかを示す
isFirefoxBooleanこれがFirefoxインスタンスであるかどうかを示す
isBidiBooleanこのセッションがBidiを使用しているかどうかを示す
isSauceBooleanこのセッションがSauce Labs上で実行されているかどうかを示す
isMacAppBooleanこのセッションがネイティブMacアプリ用に実行されているかどうかを示す
isWindowsAppBooleanこのセッションがネイティブWindowsアプリ用に実行されているかどうかを示す
isMobileBooleanモバイルセッションであることを示す。詳細はモバイルフラグを参照。
isIOSBooleaniOSセッションであることを示す。詳細はモバイルフラグを参照。
isAndroidBooleanAndroidセッションであることを示す。詳細はモバイルフラグを参照。
isNativeContextBooleanモバイルがNATIVE_APPコンテキストにあるかどうかを示す。詳細はモバイルフラグを参照。
mobileContextstringドライバーが現在いるコンテキストを提供します。例えば、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

コマンド実行が成功した場合、イベントのペイロードは次のようになります:

  • typesuccess
  • id:コマンドID
  • result:コマンドの結果(APIを参照)

コマンドエラーの場合、イベントのペイロードは次のようになります:

  • typeerror
  • id:コマンドID
  • error:エラーコード、例えば 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、メソッド、ヘッダーなどが含まれます
  • retryCount0の場合、リクエストは最初の試みでした。WebDriverIOが内部で再試行すると増加します
  • success:リクエストが成功したかどうかを表すブール値。falseの場合、errorプロパティも提供されます

イベントの例:

Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},

カスタムコマンド

一般的に使用されるワークフローを抽象化するために、ブラウザスコープにカスタムコマンドを設定できます。詳細については、カスタムコマンドのガイドをご覧ください。

Welcome! How can I help?

WebdriverIO AI Copilot