Saltar al contenido principal

El Objeto Browser

Extiende: EventEmitter

El objeto browser es la instancia de sesión que utilizas para controlar el navegador o dispositivo móvil. Si utilizas el ejecutor de pruebas WDIO, puedes acceder a la instancia de WebDriver a través del objeto global browser o driver o importarlo usando @wdio/globals. Si utilizas WebdriverIO en modo independiente, el objeto browser es devuelto por el método remote.

La sesión es inicializada por el ejecutor de pruebas. Lo mismo ocurre al finalizar la sesión. Esto también lo realiza el proceso del ejecutor de pruebas.

Propiedades

Un objeto browser tiene las siguientes propiedades:

NombreTipoDetalles
capabilitiesObjectCapacidades asignadas desde el servidor remoto.
Ejemplo:
{
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
}
requestedCapabilitiesObjectCapacidades solicitadas al servidor remoto.
Ejemplo:
{ browserName: 'chrome' }
sessionIdStringID de sesión asignado por el servidor remoto.
optionsObjectOpciones de WebdriverIO dependiendo de cómo se creó el objeto browser. Ver más en tipos de configuración.
commandListString[]Una lista de comandos registrados en la instancia del navegador
isW3CBooleanIndica si esta es una sesión W3C
isChromeBooleanIndica si esta es una instancia de Chrome
isFirefoxBooleanIndica si esta es una instancia de Firefox
isBidiBooleanIndica si esta sesión utiliza Bidi
isSauceBooleanIndica si esta sesión se está ejecutando en Sauce Labs
isMacAppBooleanIndica si esta sesión se está ejecutando para una aplicación nativa de Mac
isWindowsAppBooleanIndica si esta sesión se está ejecutando para una aplicación nativa de Windows
isMobileBooleanIndica una sesión móvil. Ver más en Indicadores Móviles.
isIOSBooleanIndica una sesión iOS. Ver más en Indicadores Móviles.
isAndroidBooleanIndica una sesión Android. Ver más en Indicadores Móviles.
isNativeContextBooleanIndica si el móvil está en el contexto NATIVE_APP. Ver más en Indicadores Móviles.
mobileContextstringProporcionará el contexto actual en el que se encuentra el driver, por ejemplo NATIVE_APP, WEBVIEW_<packageName> para Android o WEBVIEW_<pid> para iOS. Ahorrará un WebDriver extra a driver.getContext(). Ver más en Indicadores Móviles.

Métodos

Basado en el backend de automatización utilizado para tu sesión, WebdriverIO identifica qué Comandos de Protocolo se adjuntarán al objeto browser. Por ejemplo, si ejecutas una sesión automatizada en Chrome, tendrás acceso a comandos específicos de Chromium como elementHover pero no a ninguno de los comandos de Appium.

Además, WebdriverIO proporciona un conjunto de métodos convenientes que se recomienda utilizar para interactuar con el navegador o elementos en la página.

Adicionalmente, los siguientes comandos están disponibles:

NombreParámetrosDetalles
addCommand- commandName (Tipo: String)
- fn (Tipo: Function)
- attachToElement (Tipo: boolean)
Permite definir comandos personalizados que pueden ser llamados desde el objeto browser para propósitos de composición. Lee más en la guía de Comandos Personalizados.
overwriteCommand- commandName (Tipo: String)
- fn (Tipo: Function)
- attachToElement (Tipo: boolean)
Permite sobrescribir cualquier comando del navegador con funcionalidad personalizada. Úsalo con cuidado ya que puede confundir a los usuarios del framework. Lee más en la guía de Comandos Personalizados.
addLocatorStrategy- strategyName (Tipo: String)
- fn (Tipo: Function)
Permite definir una estrategia de selector personalizada, lee más en la guía de Selectores.

Observaciones

Indicadores Móviles

Si necesitas modificar tu prueba en función de si tu sesión se ejecuta en un dispositivo móvil o no, puedes acceder a los indicadores móviles para verificarlo.

Por ejemplo, dada esta configuración:

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

Puedes acceder a estos indicadores en tu prueba de la siguiente manera:

// Nota: `driver` es equivalente al objeto `browser` pero semánticamente más correcto
// puedes elegir qué variable global quieres usar
console.log(driver.isMobile) // muestra: true
console.log(driver.isIOS) // muestra: true
console.log(driver.isAndroid) // muestra: false

Esto puede ser útil si, por ejemplo, quieres definir selectores en tus objetos de página basados en el tipo de dispositivo, como esto:

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

También puedes usar estos indicadores para ejecutar solo ciertas pruebas para ciertos tipos de dispositivos:

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

Eventos

El objeto browser es un EventEmitter y se emiten varios eventos para tus casos de uso.

Aquí hay una lista de eventos. Ten en cuenta que esta no es la lista completa de eventos disponibles todavía. Siéntete libre de contribuir para actualizar el documento añadiendo descripciones de más eventos aquí.

command

Este evento se emite cada vez que WebdriverIO envía un comando WebDriver Classic. Contiene la siguiente información:

  • command: el nombre del comando, p.ej. navigateTo
  • method: el método HTTP utilizado para enviar la solicitud de comando, p.ej. POST
  • endpoint: el punto final del comando, p.ej. /session/fc8dbda381a8bea36a225bd5fd0c069b/url
  • body: la carga útil del comando, p.ej. { url: 'https://webdriver.io' }

result

Este evento se emite cada vez que WebdriverIO recibe un resultado de un comando WebDriver Classic. Contiene la misma información que el evento command con la adición de la siguiente información:

  • result: el resultado del comando

bidiCommand

Este evento se emite cada vez que WebdriverIO envía un comando WebDriver Bidi al controlador del navegador. Contiene información sobre:

  • method: método de comando WebDriver Bidi
  • params: parámetro de comando asociado (ver API)

bidiResult

En caso de una ejecución exitosa del comando, la carga útil del evento será:

  • type: success
  • id: el id del comando
  • result: el resultado del comando (ver API)

En caso de un error de comando, la carga útil del evento será:

  • type: error
  • id: el id del comando
  • error: el código de error, p.ej. invalid argument
  • message: detalles sobre el error
  • stacktrace: un seguimiento de pila

request.start

Este evento se dispara antes de que se envíe una solicitud WebDriver al controlador. Contiene información sobre la solicitud y su carga útil.

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

request.end

Este evento se dispara una vez que la solicitud al controlador recibe una respuesta. El objeto del evento contiene el cuerpo de la respuesta como resultado o un error si el comando WebDriver falló.

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

request.retry

El evento de reintento puede notificarte cuando WebdriverIO intenta volver a ejecutar el comando, p.ej. debido a un problema de red. Contiene información sobre el error que causó el reintento y la cantidad de reintentos ya realizados.

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

request.performance

Este es un evento para medir operaciones a nivel de WebDriver. Cada vez que WebdriverIO envía una solicitud al backend de WebDriver, este evento se emitirá con información útil:

  • durationMillisecond: Duración de tiempo de la solicitud en milisegundos.
  • error: Objeto de error si la solicitud falló.
  • request: Objeto de solicitud. Puedes encontrar url, método, encabezados, etc.
  • retryCount: Si es 0, la solicitud fue el primer intento. Aumentará cuando WebDriverIO reintente internamente.
  • success: Booleano para representar si la solicitud tuvo éxito o no. Si es false, también se proporcionará la propiedad error.

Un ejemplo de evento:

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

Comandos Personalizados

Puedes establecer comandos personalizados en el ámbito del navegador para abstraer flujos de trabajo que se utilizan comúnmente. Consulta nuestra guía sobre Comandos Personalizados para obtener más información.

Welcome! How can I help?

WebdriverIO AI Copilot