Das Browser-Objekt
Verlängerungen: EventEmitter
Das Browser-Objekt ist die Session-Instanz, mit der Sie den Browser oder das mobile Gerät steuern. Wenn Sie den WDIO Testrunner benutzen, kônnen Sie die globale Variable browser
oder driver
nutzen oder importieren sie die Variables vom @wdio/globals
Paket. Wenn Sie WebdriverIO im Standalone-Modus verwenden, wird das Browser-Objekt durch die remote
Methode zurückgegeben.
Das Beenden der Session wird ebenfalls vom Testrunner übernommen. Das Beenden der Session wird ebenfalls vom Testrunner übernommen. Das Beenden der Session wird ebenfalls vom Testrunner übernommen.
Eigenschaften
Ein Browser-Objekt hat folgende Eigenschaften:
Namen | Typ | Details |
---|---|---|
capabilities | Object | Assigned capabilities from the remote server. Example: { |
requestedCapabilities | Object | Angefragte Capabilities vom WebDriver Server. Beispiel: { browserName: 'chrome' } |
sessionId | String | Session-Id vom Remote-Server zugewiesen. |
options | Object | WebdriverIO Optionen je nachdem, wie das Browserobjekt erstellt wurde. Weitere Setup-Typen. |
commandList | String[] | Eine Liste der Befehle, die in der Browser-Instanz registriert sind |
isW3C | Boolean | Indicates if this is a W3C session |
isChrome | Boolean | Indicates if this Chrome instance |
isFirefox | Boolean | Indicates if this Firefox instance |
isBidi | Boolean | Indicates if this session uses Bidi |
isSauce | Boolean | Indicates if this session is Running on Sauce Labs |
isMacApp | Boolean | Indicates if this session is Running for a native Mac App |
isWindowsApp | Boolean | Indicates if this session is Running for a native Windows App |
isMobile | Boolean | Zeigt eine mobile Session an. Mehr unter Mobile Flags. |
isIOS | Boolean | Zeigt eine iOS-Session an. Mehr unter Mobile Flags. |
isAndroid | Boolean | Zeigt eine Android-Sitzung an. Mehr unter Mobile Flags. |
isNativeContext | Boolean | Indicates if the mobile is in the NATIVE_APP context. See more under Mobile Flags. |
mobileContext | string | The will provide the current context the driver is in, for example NATIVE_APP , WEBVIEW_<packageName> for Android or WEBVIEW_<pid> for iOS. It will save an extra WebDriver to driver.getContext() . See more under Mobile Flags. |
Methoden
Basierend auf dem für Ihre Sitzung verwendeten Automatisierungs-Backend WebdriverIO identifiziert welche Protokollbefehle dem Browser-Objekt hinzugefügt werden. Zum Beispiel, bei einer automatisierten Sitzung in Chrome haben Sie Zugriff auf Chrome-spezifische Befehle wie elementHover
, aber keine der Appium Befehle.
Außerdem bietet WebdriverIO eine Reihe von praktischen Methoden, die zur Verwendung empfohlen werden um mit dem Browser oder Elementen auf der Seite zu interagieren.
Zusätzlich stehen folgende Befehle zur Verfügung:
Namen | Parameter | Details |
---|---|---|
addCommand | - commandName (Type: String )- fn (Type: Function )- attachToElement (Type: boolean ) | Ermöglicht die Definition benutzerdefinierter Befehle, die aus dem Browser-Objekt für Kompositionszwecke aufgerufen werden können. Lesen Sie mehr in der Benutzerdefinierte Anleitung |
overwriteCommand | - commandName (Type: String )- fn (Type: Function )- attachToElement (Type: boolean ) | Ermöglicht das Überschreiben aller Browserbefehle mit benutzerdefinierten Funktionen. Verwenden Sie diese Funktionalität sorgfältig, da es Framework-Benutzer verwirren kann. Lesen Sie mehr in der Benutzerdefinierte Anleitung |
addLocatorStrategy | - strategyName (Type: String )- fn (Type: Function ) | Ermöglicht das Definieren einer benutzerdefinierten Selektorstrategie. Weitere Informationen finden Sie im Selektoren Guide. |
Bemerkungen
Mobile Markierungen
Wenn sich Ihr Test anders verhalten soll, basierend darauf, ob dieser auf einem Mobilen-Endgerät ausgeführt wird oder nicht, können Sie auf die mobilen Attribute der Session zurückgreifen.
Zum Beispiel mit dieser Konfiguration:
// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}
Sie können auf diese Markierungen in Ihrem Test wie folgt zugreifen:
// 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
Dies kann nützlich sein, um zum Beispiel Selektoren basierend vom Device Typ im Page Objekt zu definieren:
// 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 ebenfalls bestimmte mobile Markierungen (z.B. isAndroid oder isIOS) verwenden, um Tests nur auf bestimmten Gerätetypen auszuführen:
// mytest.e2e.js
describe('my test', () => {
// ...
// only run test with Android devices
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})
Events
Das Browser-Objekt ist ein EventEmitter und ein paar Ereignisse werden für Ihren Gebrauch emittiert.
Hier ist eine Liste der Ereignisse. Beachten Sie, dass dies noch nicht die vollständige Liste der verfügbaren Events ist. Zögern Sie nicht, das Dokument zu aktualisieren, indem Sie hier Beschreibungen von weiteren Events hinzufügen.
request.start
This event is fired before a WebDriver request is sent to the driver. It contains information about the request and its payload.
browser.on('request.start', (ev: RequestInit) => {
// ...
})
request.end
This event is fired once the request to the driver received a response. The event object either contains the response body as result or an error if the WebDriver command failed.
browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})
request.retry
The retry event can notify you when WebdriverIO attempts to retry running the command, e.g. due to a network issue. It contains information about the error that caused the retry and the amount of retries already done.
browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})
command
This event is emitted whenever WebdriverIO sends a WebDriver Classic command. It contains the following information:
command
: the command name, e.g.navigateTo
method
: the HTTP method used to send the command request, e.g.POST
endpoint
: the command endpoint, e.g./session/fc8dbda381a8bea36a225bd5fd0c069b/url
body
: the command payload, e.g.{ url: 'https://webdriver.io' }
result
This event is emitted whenever WebdriverIO receives a result of a WebDriver Classic command. It contains the same information as the command
event with the addition of the following information:
result
: the command result
bidiCommand
This event is emitted whenever WebdriverIO sends a WebDriver Bidi command to the browser driver. It contains information about:
method
: WebDriver Bidi command methodparams
: associated command parameter (see API)
bidiResult
In case of a successful command execution, the event payload will be:
type
:success
id
: the command idresult
: the command result (see API)
In case of a command error, the event payload will be:
type
:error
id
: the command iderror
: the error code, e.g.invalid argument
message
: details about the errorstacktrace
: a stack trace
request.start
This event is fired before a WebDriver request is sent to the driver. It contains information about the request and its payload.
browser.on('request.start', (ev: RequestInit) => {
// ...
})
request.end
This event is fired once the request to the driver received a response. The event object either contains the response body as result or an error if the WebDriver command failed.
browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})
request.retry
The retry event can notify you when WebdriverIO attempts to retry running the command, e.g. due to a network issue. It contains information about the error that caused the retry and the amount of retries already done.
browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})
request.performance
Dies ist ein Ereignis, um Operationen auf WebDriver Ebene zu messen. Immer wenn WebdriverIO eine Anfrage an das WebDriver-Backend sendet, wird dieses Ereignis mit einigen nützlichen Informationen emittiert:
durationMillisecond
: Zeitdauer der Anfrage in Millisekunden.error
: Fehlerobjekt wenn die Anfrage fehlgeschlagen ist.request
: Request Objekt. Hier finden Sie Url, Methode, Header, etc.retryCount
: Wenn es0
ist, war die Anfrage der erste Versuch. Die Zahl erhöht sich, wenn WebDriverIO unter der Haube den Befehl erneut ausführt.success
: Boolean die anzeigt, ob der Befehl erfolgreich ausgeführt wurde. Wenn esfalse
ist, wird eineerror
Eigenschaft ebenfalls zur Verfügung gestellt.
Ein Beispielereignis:
Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},
Benutzerdefinierte Befehle
Sie können benutzerdefinierte Befehle dem Browser Objekt hinzufügen, um Workflows, die häufig verwendet werden, in einzelne Befehle zu verpacken. Schauen Sie sich unsere Anleitung unter Benutzerdefinierte Befehle für weitere Informationen an.