Aller au contenu principal

L'Objet Browser

Étend : EventEmitter

L'objet browser est l'instance de session que vous utilisez pour contrÎler le navigateur ou l'appareil mobile. Si vous utilisez le test runner WDIO, vous pouvez accéder à l'instance WebDriver via l'objet global browser ou driver ou l'importer en utilisant @wdio/globals. Si vous utilisez WebdriverIO en mode autonome, l'objet browser est retourné par la méthode remote.

La session est initialisĂ©e par le test runner. Il en va de mĂȘme pour la fin de la session. Cela est Ă©galement fait par le processus du test runner.

PropriĂ©tĂ©s​

Un objet browser possÚde les propriétés suivantes :

NomTypeDétails
capabilitiesObjectCapacités assignées par le serveur distant.
Exemple :
{
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
}
requestedCapabilitiesObjectCapacités demandées au serveur distant.
Exemple :
{ browserName: 'chrome' }
sessionIdStringID de session assigné par le serveur distant.
optionsObjectOptions WebdriverIO selon la façon dont l'objet browser a été créé. Voir plus dans types de configuration.
commandListString[]Une liste de commandes enregistrées pour l'instance du navigateur
isW3CBooleanIndique s'il s'agit d'une session W3C
isChromeBooleanIndique s'il s'agit d'une instance Chrome
isFirefoxBooleanIndique s'il s'agit d'une instance Firefox
isBidiBooleanIndique si cette session utilise Bidi
isSauceBooleanIndique si cette session s'exécute sur Sauce Labs
isMacAppBooleanIndique si cette session s'exécute pour une application Mac native
isWindowsAppBooleanIndique si cette session s'exécute pour une application Windows native
isMobileBooleanIndique une session mobile. Voir plus sous Indicateurs mobiles.
isIOSBooleanIndique une session iOS. Voir plus sous Indicateurs mobiles.
isAndroidBooleanIndique une session Android. Voir plus sous Indicateurs mobiles.
isNativeContextBooleanIndique si le mobile est dans le contexte NATIVE_APP. Voir plus sous Indicateurs mobiles.
mobileContextstringFournit le contexte actuel dans lequel se trouve le pilote, par exemple NATIVE_APP, WEBVIEW_<packageName> pour Android ou WEBVIEW_<pid> pour iOS. Cela économise un WebDriver supplémentaire pour driver.getContext(). Voir plus sous Indicateurs mobiles.

MĂ©thodes​

En fonction du backend d'automatisation utilisé pour votre session, WebdriverIO identifie quelles Commandes de Protocole seront attachées à l'objet browser. Par exemple, si vous exécutez une session automatisée dans Chrome, vous aurez accÚs aux commandes spécifiques à Chromium comme elementHover mais pas aux commandes Appium.

De plus, WebdriverIO fournit un ensemble de méthodes pratiques recommandées pour interagir avec le navigateur ou les éléments sur la page.

En plus de cela, les commandes suivantes sont disponibles :

NomParamÚtresDétails
addCommand- commandName (Type: String)
- fn (Type: Function)
- attachToElement (Type: boolean)
Permet de dĂ©finir des commandes personnalisĂ©es qui peuvent ĂȘtre appelĂ©es depuis l'objet browser Ă  des fins de composition. En savoir plus dans le guide Commande personnalisĂ©e.
overwriteCommand- commandName (Type: String)
- fn (Type: Function)
- attachToElement (Type: boolean)
Permet de remplacer n'importe quelle commande du navigateur par une fonctionnalitĂ© personnalisĂ©e. À utiliser avec prĂ©caution car cela peut confondre les utilisateurs du framework. En savoir plus dans le guide Commande personnalisĂ©e.
addLocatorStrategy- strategyName (Type: String)
- fn (Type: Function)
Permet de définir une stratégie de sélecteur personnalisée, en savoir plus dans le guide Sélecteurs.

Remarques​

Indicateurs mobiles​

Si vous devez modifier votre test selon que votre session s'exécute ou non sur un appareil mobile, vous pouvez accéder aux indicateurs mobiles pour vérifier.

Par exemple, avec cette configuration :

// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}

Vous pouvez accéder à ces indicateurs dans votre test comme ceci :

// Remarque : `driver` est l'équivalent de l'objet `browser` mais sémantiquement plus correct
// vous pouvez choisir quelle variable globale vous souhaitez utiliser
console.log(driver.isMobile) // affiche : true
console.log(driver.isIOS) // affiche : true
console.log(driver.isAndroid) // affiche : false

Cela peut ĂȘtre utile si, par exemple, vous souhaitez dĂ©finir des sĂ©lecteurs dans vos objets de page en fonction du type d'appareil, comme ceci :

// 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}`)
}
// ...
}

Vous pouvez également utiliser ces indicateurs pour exécuter uniquement certains tests pour certains types d'appareils :

// mytest.e2e.js
describe('my test', () => {
// ...
// exécuter le test uniquement avec les appareils Android
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})

ÉvĂ©nements​

L'objet browser est un EventEmitter et plusieurs événements sont émis pour vos cas d'utilisation.

Voici une liste d'événements. Gardez à l'esprit que ce n'est pas encore la liste complÚte des événements disponibles. N'hésitez pas à contribuer pour mettre à jour le document en ajoutant des descriptions d'autres événements ici.

command​

Cet événement est émis chaque fois que WebdriverIO envoie une commande WebDriver Classic. Il contient les informations suivantes :

  • command : le nom de la commande, par ex. navigateTo
  • method : la mĂ©thode HTTP utilisĂ©e pour envoyer la demande de commande, par ex. POST
  • endpoint : le point de terminaison de la commande, par ex. /session/fc8dbda381a8bea36a225bd5fd0c069b/url
  • body : la charge utile de la commande, par ex. { url: 'https://webdriver.io' }

result​

Cet Ă©vĂ©nement est Ă©mis chaque fois que WebdriverIO reçoit un rĂ©sultat d'une commande WebDriver Classic. Il contient les mĂȘmes informations que l'Ă©vĂ©nement command avec l'ajout des informations suivantes :

  • result : le rĂ©sultat de la commande

bidiCommand​

Cet événement est émis chaque fois que WebdriverIO envoie une commande WebDriver Bidi au pilote du navigateur. Il contient des informations sur :

  • method : mĂ©thode de commande WebDriver Bidi
  • params : paramĂštre de commande associĂ© (voir API)

bidiResult​

En cas d'exécution réussie de la commande, la charge utile de l'événement sera :

  • type : success
  • id : l'identifiant de la commande
  • result : le rĂ©sultat de la commande (voir API)

En cas d'erreur de commande, la charge utile de l'événement sera :

  • type : error
  • id : l'identifiant de la commande
  • error : le code d'erreur, par ex. invalid argument
  • message : dĂ©tails sur l'erreur
  • stacktrace : une trace de la pile

request.start​

Cet Ă©vĂ©nement est dĂ©clenchĂ© avant qu'une requĂȘte WebDriver ne soit envoyĂ©e au pilote. Il contient des informations sur la requĂȘte et sa charge utile.

browser.on('request.start', (ev: RequestInit) => {
// ...
})

request.end​

Cet Ă©vĂ©nement est dĂ©clenchĂ© une fois que la requĂȘte au pilote a reçu une rĂ©ponse. L'objet d'Ă©vĂ©nement contient soit le corps de la rĂ©ponse comme rĂ©sultat, soit une erreur si la commande WebDriver a Ă©chouĂ©.

browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})

request.retry​

L'événement de nouvelle tentative peut vous informer lorsque WebdriverIO tente de réexécuter la commande, par exemple en raison d'un problÚme de réseau. Il contient des informations sur l'erreur qui a provoqué la nouvelle tentative et le nombre de tentatives déjà effectuées.

browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})

request.performance​

Il s'agit d'un Ă©vĂ©nement pour mesurer les opĂ©rations au niveau WebDriver. Chaque fois que WebdriverIO envoie une requĂȘte au backend WebDriver, cet Ă©vĂ©nement sera Ă©mis avec des informations utiles :

  • durationMillisecond : DurĂ©e de la requĂȘte en millisecondes.
  • error : Objet d'erreur si la requĂȘte a Ă©chouĂ©.
  • request : Objet de requĂȘte. Vous pouvez trouver url, mĂ©thode, en-tĂȘtes, etc.
  • retryCount : S'il est 0, la requĂȘte Ă©tait la premiĂšre tentative. Il augmentera lorsque WebDriverIO rĂ©essaie en interne.
  • success : BoolĂ©en pour indiquer si la requĂȘte a rĂ©ussi ou non. S'il est false, la propriĂ©tĂ© error sera Ă©galement fournie.

Un exemple d'événement :

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

Commandes personnalisĂ©es​

Vous pouvez définir des commandes personnalisées dans la portée du navigateur pour abstraire les flux de travail couramment utilisés. Consultez notre guide sur les Commandes personnalisées pour plus d'informations.

Welcome! How can I help?

WebdriverIO AI Copilot