Vai al contenuto principale

L'Oggetto Browser

Estende: EventEmitter

L'oggetto browser è l'istanza di sessione che utilizzi per controllare il browser o il dispositivo mobile. Se utilizzi il test runner WDIO, puoi accedere all'istanza WebDriver tramite l'oggetto globale browser o driver o importarlo utilizzando @wdio/globals. Se utilizzi WebdriverIO in modalità standalone, l'oggetto browser viene restituito dal metodo remote.

La sessione viene inizializzata dal test runner. Lo stesso vale per terminare la sessione. Anche questo viene fatto dal processo del test runner.

Proprietà

Un oggetto browser ha le seguenti proprietà:

NomeTipoDettagli
capabilitiesObjectCapacità assegnate dal server remoto.
Esempio:
{
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à richieste dal server remoto.
Esempio:
{ browserName: 'chrome' }
sessionIdStringID di sessione assegnato dal server remoto.
optionsObjectOpzioni WebdriverIO a seconda di come è stato creato l'oggetto browser. Vedi tipi di configurazione.
commandListString[]Un elenco di comandi registrati nell'istanza del browser
isW3CBooleanIndica se questa è una sessione W3C
isChromeBooleanIndica se questa è un'istanza di Chrome
isFirefoxBooleanIndica se questa è un'istanza di Firefox
isBidiBooleanIndica se questa sessione utilizza Bidi
isSauceBooleanIndica se questa sessione è in esecuzione su Sauce Labs
isMacAppBooleanIndica se questa sessione è in esecuzione per un'app nativa Mac
isWindowsAppBooleanIndica se questa sessione è in esecuzione per un'app nativa Windows
isMobileBooleanIndica una sessione mobile. Vedi più informazioni in Flag Mobili.
isIOSBooleanIndica una sessione iOS. Vedi più informazioni in Flag Mobili.
isAndroidBooleanIndica una sessione Android. Vedi più informazioni in Flag Mobili.
isNativeContextBooleanIndica se il mobile è nel contesto NATIVE_APP. Vedi più informazioni in Flag Mobili.
mobileContextstringFornirà il contesto attuale in cui si trova il driver, ad esempio NATIVE_APP, WEBVIEW_<packageName> per Android o WEBVIEW_<pid> per iOS. Salverà un WebDriver extra in driver.getContext(). Vedi più informazioni in Flag Mobili.

Metodi

In base al backend di automazione utilizzato per la sessione, WebdriverIO identifica quali Comandi del Protocollo saranno collegati all'oggetto browser. Ad esempio, se esegui una sessione automatizzata in Chrome, avrai accesso a comandi specifici di Chromium come elementHover ma non a nessuno dei comandi Appium.

Inoltre, WebdriverIO fornisce un set di metodi convenienti che sono raccomandati da utilizzare per interagire con il browser o gli elementi sulla pagina.

Oltre a ciò, sono disponibili i seguenti comandi:

NomeParametriDettagli
addCommand- commandName (Tipo: String)
- fn (Tipo: Function)
- attachToElement (Tipo: boolean)
Consente di definire comandi personalizzati che possono essere chiamati dall'oggetto browser per scopi di composizione. Leggi di più nella guida Comandi Personalizzati.
overwriteCommand- commandName (Tipo: String)
- fn (Tipo: Function)
- attachToElement (Tipo: boolean)
Consente di sovrascrivere qualsiasi comando del browser con funzionalità personalizzate. Usa con cautela in quanto può confondere gli utenti del framework. Leggi di più nella guida Comandi Personalizzati.
addLocatorStrategy- strategyName (Tipo: String)
- fn (Tipo: Function)
Consente di definire una strategia di selezione personalizzata, leggi di più nella guida Selettori.

Note

Flag Mobili

Se hai bisogno di modificare il tuo test in base al fatto che la tua sessione sia in esecuzione su un dispositivo mobile o meno, puoi accedere ai flag mobili per controllare.

Ad esempio, data questa configurazione:

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

Puoi accedere a questi flag nel tuo test in questo modo:

// Nota: `driver` è l'equivalente dell'oggetto `browser` ma semanticamente più corretto
// puoi scegliere quale variabile globale utilizzare
console.log(driver.isMobile) // output: true
console.log(driver.isIOS) // output: true
console.log(driver.isAndroid) // output: false

Questo può essere utile se, ad esempio, vuoi definire selettori nei tuoi page objects in base al tipo di dispositivo, come questo:

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

Puoi anche utilizzare questi flag per eseguire solo determinati test per determinati tipi di dispositivi:

// mytest.e2e.js
describe('my test', () => {
// ...
// esegui il test solo con dispositivi Android
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})

Eventi

L'oggetto browser è un EventEmitter e vengono emessi diversi eventi per i tuoi casi d'uso.

Ecco un elenco di eventi. Tieni presente che questo non è ancora l'elenco completo degli eventi disponibili. Sentiti libero di contribuire all'aggiornamento del documento aggiungendo qui le descrizioni di altri eventi.

command

Questo evento viene emesso ogni volta che WebdriverIO invia un comando WebDriver Classic. Contiene le seguenti informazioni:

  • command: il nome del comando, ad es. navigateTo
  • method: il metodo HTTP utilizzato per inviare la richiesta di comando, ad es. POST
  • endpoint: l'endpoint del comando, ad es. /session/fc8dbda381a8bea36a225bd5fd0c069b/url
  • body: il payload del comando, ad es. { url: 'https://webdriver.io' }

result

Questo evento viene emesso ogni volta che WebdriverIO riceve un risultato di un comando WebDriver Classic. Contiene le stesse informazioni dell'evento command con l'aggiunta delle seguenti informazioni:

  • result: il risultato del comando

bidiCommand

Questo evento viene emesso ogni volta che WebdriverIO invia un comando WebDriver Bidi al driver del browser. Contiene informazioni su:

  • method: metodo del comando WebDriver Bidi
  • params: parametro di comando associato (vedi API)

bidiResult

In caso di esecuzione del comando riuscita, il payload dell'evento sarà:

  • type: success
  • id: l'id del comando
  • result: il risultato del comando (vedi API)

In caso di errore del comando, il payload dell'evento sarà:

  • type: error
  • id: l'id del comando
  • error: il codice di errore, ad es. invalid argument
  • message: dettagli sull'errore
  • stacktrace: una traccia dello stack

request.start

Questo evento viene attivato prima che una richiesta WebDriver venga inviata al driver. Contiene informazioni sulla richiesta e sul suo payload.

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

request.end

Questo evento viene attivato una volta che la richiesta al driver ha ricevuto una risposta. L'oggetto evento contiene il corpo della risposta come risultato o un errore se il comando WebDriver non è riuscito.

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

request.retry

L'evento di ripetizione può informarti quando WebdriverIO tenta di riprovare l'esecuzione del comando, ad esempio a causa di un problema di rete. Contiene informazioni sull'errore che ha causato la ripetizione e sul numero di tentativi già effettuati.

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

request.performance

Questo è un evento per misurare le operazioni a livello di WebDriver. Ogni volta che WebdriverIO invia una richiesta al backend WebDriver, questo evento verrà emesso con alcune informazioni utili:

  • durationMillisecond: Durata temporale della richiesta in millisecondi.
  • error: Oggetto errore se la richiesta non è riuscita.
  • request: Oggetto richiesta. Puoi trovare url, metodo, intestazioni, ecc.
  • retryCount: Se è 0, la richiesta è stato il primo tentativo. Aumenterà quando WebDriverIO riprova internamente.
  • success: Booleano per rappresentare se la richiesta ha avuto successo o meno. Se è false, verrà fornita anche la proprietà error.

Un esempio di evento:

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

Comandi Personalizzati

Puoi impostare comandi personalizzati nell'ambito del browser per astrarre i flussi di lavoro che vengono comunemente utilizzati. Consulta la nostra guida sui Comandi Personalizzati per maggiori informazioni.

Welcome! How can I help?

WebdriverIO AI Copilot