Das Browser-Objekt
Erweitert: EventEmitter
Das Browser-Objekt ist die Sitzungsinstanz, mit der Sie den Browser oder das mobile GerĂ€t steuern. Wenn Sie den WDIO-Testrunner verwenden, können Sie auf die WebDriver-Instanz ĂŒber das globale browser
- oder driver
-Objekt zugreifen oder es mit @wdio/globals
importieren. Wenn Sie WebdriverIO im Standalone-Modus verwenden, wird das Browser-Objekt von der remote
-Methode zurĂŒckgegeben.
Die Sitzung wird vom Testrunner initialisiert. Dasselbe gilt fĂŒr die Beendigung der Sitzung. Dies wird ebenfalls vom Testrunner-Prozess durchgefĂŒhrt.
Eigenschaftenâ
Ein Browser-Objekt hat die folgenden Eigenschaften:
Name | Typ | Details |
---|---|---|
capabilities | Object | Zugewiesene FĂ€higkeiten vom Remote-Server. Beispiel: { |
requestedCapabilities | Object | Vom Remote-Server angeforderte FĂ€higkeiten. Beispiel: { browserName: 'chrome' } |
sessionId | String | Vom Remote-Server zugewiesene Sitzungs-ID. |
options | Object | WebdriverIO Optionen abhÀngig davon, wie das Browser-Objekt erstellt wurde. Siehe mehr unter Setup-Typen. |
commandList | String[] | Eine Liste der bei der Browser-Instanz registrierten Befehle |
isW3C | Boolean | Gibt an, ob dies eine W3C-Sitzung ist |
isChrome | Boolean | Gibt an, ob dies eine Chrome-Instanz ist |
isFirefox | Boolean | Gibt an, ob dies eine Firefox-Instanz ist |
isBidi | Boolean | Gibt an, ob diese Sitzung Bidi verwendet |
isSauce | Boolean | Gibt an, ob diese Sitzung auf Sauce Labs lÀuft |
isMacApp | Boolean | Gibt an, ob diese Sitzung fĂŒr eine native Mac-App lĂ€uft |
isWindowsApp | Boolean | Gibt an, ob diese Sitzung fĂŒr eine native Windows-App lĂ€uft |
isMobile | Boolean | Gibt eine mobile Sitzung an. Weitere Informationen unter Mobile Flags. |
isIOS | Boolean | Gibt eine iOS-Sitzung an. Weitere Informationen unter Mobile Flags. |
isAndroid | Boolean | Gibt eine Android-Sitzung an. Weitere Informationen unter Mobile Flags. |
isNativeContext | Boolean | Gibt an, ob das MobilgerÀt im NATIVE_APP -Kontext ist. Weitere Informationen unter Mobile Flags. |
mobileContext | string | Dies gibt den aktuellen Kontext an, in dem sich der Treiber befindet, zum Beispiel NATIVE_APP , WEBVIEW_<packageName> fĂŒr Android oder WEBVIEW_<pid> fĂŒr iOS. Es spart einen zusĂ€tzlichen WebDriver-Aufruf zu driver.getContext() . Weitere Informationen unter Mobile Flags. |
Methodenâ
Basierend auf dem fĂŒr Ihre Sitzung verwendeten Automatisierungs-Backend identifiziert WebdriverIO, welche Protokollbefehle dem Browser-Objekt zugeordnet werden. Wenn Sie beispielsweise eine automatisierte Sitzung in Chrome ausfĂŒhren, haben Sie Zugriff auf Chrome-spezifische Befehle wie elementHover
, aber nicht auf die Appium-Befehle.
DarĂŒber hinaus bietet WebdriverIO eine Reihe praktischer Methoden, die empfohlen werden, um mit dem Browser oder Elementen auf der Seite zu interagieren.
ZusĂ€tzlich dazu sind die folgenden Befehle verfĂŒgbar:
Name | Parameter | Details |
---|---|---|
addCommand | - commandName (Typ: String )- fn (Typ: Function )- attachToElement (Typ: boolean ) | Ermöglicht die Definition benutzerdefinierter Befehle, die vom Browser-Objekt fĂŒr Kompositionszwecke aufgerufen werden können. Lesen Sie mehr im Leitfaden zu Benutzerdefinierten Befehlen. |
overwriteCommand | - commandName (Typ: String )- fn (Typ: Function )- attachToElement (Typ: boolean ) | Ermöglicht das Ăberschreiben eines beliebigen Browser-Befehls mit benutzerdefinierter FunktionalitĂ€t. Verwenden Sie dies mit Vorsicht, da es Framework-Benutzer verwirren kann. Lesen Sie mehr im Leitfaden zu Benutzerdefinierten Befehlen. |
addLocatorStrategy | - strategyName (Typ: String )- fn (Typ: Function ) | Ermöglicht die Definition einer benutzerdefinierten Selektorstrategie, lesen Sie mehr im Selektoren-Leitfaden. |
Anmerkungenâ
Mobile Flagsâ
Wenn Sie Ihren Test basierend darauf Ă€ndern mĂŒssen, ob Ihre Sitzung auf einem mobilen GerĂ€t lĂ€uft oder nicht, können Sie die mobilen Flags ĂŒberprĂŒfen.
Zum Beispiel, bei dieser Konfiguration:
// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}
Sie können in Ihrem Test auf diese Flags wie folgt zugreifen:
// Hinweis: `driver` ist das Ăquivalent zum `browser`-Objekt, aber semantisch korrekter
// Sie können wÀhlen, welche globale Variable Sie verwenden möchten
console.log(driver.isMobile) // Ausgabe: true
console.log(driver.isIOS) // Ausgabe: true
console.log(driver.isAndroid) // Ausgabe: false
Dies kann nĂŒtzlich sein, wenn Sie beispielsweise Selektoren in Ihren Seitenobjecten basierend auf dem GerĂ€tetyp definieren möchten, wie hier:
// 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}`)
}
// ...
}
Sie können diese Flags auch verwenden, um bestimmte Tests nur fĂŒr bestimmte GerĂ€tetypen auszufĂŒhren:
// mytest.e2e.js
describe('my test', () => {
// ...
// nur Test mit Android-GerĂ€ten ausfĂŒhren
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})
Eventsâ
Das Browser-Objekt ist ein EventEmitter und es werden einige Events fĂŒr Ihre AnwendungsfĂ€lle ausgelöst.
Hier ist eine Liste von Events. Beachten Sie, dass dies noch nicht die vollstĂ€ndige Liste der verfĂŒgbaren Events ist. FĂŒhlen Sie sich frei, zur Aktualisierung des Dokuments beizutragen, indem Sie Beschreibungen weiterer Events hier hinzufĂŒgen.
command
â
Dieses Event wird ausgelöst, wenn WebdriverIO einen WebDriver Classic-Befehl sendet. Es enthÀlt die folgenden Informationen:
command
: der Befehlsname, z.B.navigateTo
method
: die HTTP-Methode, die zum Senden der Befehlsanfrage verwendet wird, z.B.POST
endpoint
: der Befehlsendpunkt, z.B./session/fc8dbda381a8bea36a225bd5fd0c069b/url
body
: die Befehlsnutzlast, z.B.{ url: 'https://webdriver.io' }
result
â
Dieses Event wird ausgelöst, wenn WebdriverIO ein Ergebnis eines WebDriver Classic-Befehls erhÀlt. Es enthÀlt die gleichen Informationen wie das command
-Event mit der ErgÀnzung der folgenden Informationen:
result
: das Befehlsergebnis
bidiCommand
â
Dieses Event wird ausgelöst, wenn WebdriverIO einen WebDriver Bidi-Befehl an den Browser-Treiber sendet. Es enthĂ€lt Informationen ĂŒber:
method
: WebDriver Bidi-Befehlsmethodeparams
: zugehörige Befehlsparameter (siehe API)
bidiResult
â
Im Falle einer erfolgreichen BefehlsausfĂŒhrung wird die Event-Nutzlast sein:
type
:success
id
: die Befehls-IDresult
: das Befehlsergebnis (siehe API)
Im Falle eines Befehlsfehlers wird die Event-Nutzlast sein:
type
:error
id
: die Befehls-IDerror
: der Fehlercode, z.B.invalid argument
message
: Details zum Fehlerstacktrace
: ein Stack-Trace
request.start
â
Dieses Event wird ausgelöst, bevor eine WebDriver-Anfrage an den Treiber gesendet wird. Es enthĂ€lt Informationen ĂŒber die Anfrage und ihre Nutzlast.
browser.on('request.start', (ev: RequestInit) => {
// ...
})
request.end
â
Dieses Event wird ausgelöst, sobald die Anfrage an den Treiber eine Antwort erhalten hat. Das Event-Objekt enthÀlt entweder den Antworttext als Ergebnis oder einen Fehler, wenn der WebDriver-Befehl fehlgeschlagen ist.
browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})
request.retry
â
Das Retry-Event kann Sie benachrichtigen, wenn WebdriverIO versucht, den Befehl erneut auszufĂŒhren, z.B. aufgrund eines Netzwerkproblems. Es enthĂ€lt Informationen ĂŒber den Fehler, der den Wiederholungsversuch verursacht hat, und die Anzahl der bereits durchgefĂŒhrten Wiederholungsversuche.
browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})
request.performance
â
Dies ist ein Event zur Messung von WebDriver-Level-Operationen. Wenn WebdriverIO eine Anfrage an das WebDriver-Backend sendet, wird dieses Event mit einigen nĂŒtzlichen Informationen ausgelöst:
durationMillisecond
: Zeitdauer der Anfrage in Millisekunden.error
: Fehlerobjekt, wenn die Anfrage fehlgeschlagen ist.request
: Anfrageobjekt. Sie können URL, Methode, Header usw. finden.retryCount
: Wenn es0
ist, war die Anfrage der erste Versuch. Es wird erhöht, wenn WebDriverIO im Hintergrund wiederholt.success
: Boolean, um darzustellen, ob die Anfrage erfolgreich war oder nicht. Wenn esfalse
ist, wird auch dieerror
-Eigenschaft bereitgestellt.
Ein Beispiel-Event:
Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},
Benutzerdefinierte Befehleâ
Sie können benutzerdefinierte Befehle im Browser-Bereich festlegen, um hĂ€ufig verwendete ArbeitsablĂ€ufe zu abstrahieren. Schauen Sie sich unseren Leitfaden zu Benutzerdefinierten Befehlen fĂŒr weitere Informationen an.