Saltar al contenido principal

getContext

Recupera el contexto de la sesión actual.

Este método mejora el comando predeterminado de Appium context/WebdriverIO getContext proporcionando una opción para devolver información detallada del contexto, facilitando el trabajo con aplicaciones híbridas que utilizan webviews.

Cómo funcionan los contextos

Consulta la documentación de Aplicaciones Híbridas para más información. A continuación se explican los desafíos asociados con el comando getContext:

Para Android:

  • Los webviews pueden contener múltiples páginas (como pestañas de navegador), y la identificación de la página correcta requiere metadatos adicionales como title o url.
  • Los métodos predeterminados de Appium solo proporcionan nombres básicos de contexto (por ejemplo, WEBVIEW_{packageName}) sin información detallada sobre las páginas dentro del webview.

Para iOS:

  • Cada webview se identifica con una cadena genérica WEBVIEW_{id}, que no indica su contenido o la pantalla de la aplicación a la que pertenece.

¿Por qué usar este método?

  • Comportamiento predeterminado:
    • Devuelve el contexto actual como una cadena (por ejemplo, NATIVE_APP o WEBVIEW_{id}).
  • Contexto detallado:
    • Cuando returnDetailedContext está habilitado, recupera metadatos como:
      • Android: packageName, title, url y webviewPageId.
      • iOS: bundleId, title y url.
  • Opciones específicas de Android:
    • Los intervalos de reintento y tiempos de espera se pueden personalizar para manejar retrasos en la inicialización del webview.
Notas y limitaciones
  • Si returnDetailedContext no está habilitado, el método se comporta como el método predeterminado de Appium getContext.
  • Si deseas utilizar el método "predeterminado" de Appium context, puedes usar el método driver.getAppiumContext(), ver también el comando Appium Contexts.
  • Android: Las opciones específicas de Android (androidWebviewConnectionRetryTime y androidWebviewConnectTimeout) no tienen efecto en iOS.
  • Muestra advertencias si se encuentran múltiples o ningún contexto detallado:
    • We found more than 1 detailed context for the current context '{context}'. We will return the first context.
    • We did not get back any detailed context for the current context '{context}'. We will return the current context as a string.
Parámetros
NombreTipoDetalles
options
opcional
GetContextsOptionsLas opciones de getContext (opcional)
options.returnDetailedContext
opcional
booleanPor defecto, solo devolvemos el nombre del contexto basado en la API predeterminada de Appium context, que es solo una cadena. Si deseas obtener información detallada del contexto, establece esto como true. El valor predeterminado es false (opcional).
options.androidWebviewConnectionRetryTime
opcional
numberEl tiempo en milisegundos para esperar entre cada reintento de conexión al webview. El valor predeterminado es 500 ms (opcional).
SOLO PARA ANDROID
options.androidWebviewConnectTimeout
opcional
numberEl tiempo máximo en milisegundos para esperar a que se detecte una página de webview. El valor predeterminado es 5000 ms (opcional).
SOLO PARA ANDROID
Ejemplos
default.test.js
it('should return the current context with the default Appium `context` method', async () => {
// For Android
await driver.getContext()
// Returns 'WEBVIEW_com.wdiodemoapp' or 'NATIVE_APP'
//
// For iOS, the context will be 'WEBVIEW_{number}'
await driver.getContext()
// Returns 'WEBVIEW_94703.19' or 'NATIVE_APP'
})

detailed.test.js
it('should return the context of the current session with more detailed information', async () => {
// For Android
await driver.getContext({ returnDetailedContext: true})
// Returns or `NATIVE_APP`, or
// {
// id: 'WEBVIEW_com.wdiodemoapp',
// title: 'WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO',
// url: 'https://webdriver.io/',
// packageName: 'com.wdiodemoapp',
// webviewPageId: '5C0425CF67E9B169245F48FF21172912'
// }
//
// For iOS, the context will be 'WEBVIEW_{number}'
await driver.getContext({ returnDetailedContext: true})
// Returns or `NATIVE_APP`, or
// {
// id: 'WEBVIEW_64981.1',
// title: 'WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO',
// url: 'https://webdriver.io/',
// bundleId: 'org.reactjs.native.example.wdiodemoapp'
// }
})

customize.retry.test.js
it('should be able to cusomize the retry intervals and timeouts to handle delayed webview initialization', async () => {
// For Android
await driver.getContext({
returnDetailedContext: true,
// NOTE: The following options are Android-specific
// For Android we might need to wait a bit longer to connect to the webview, so we can provide some additional options
androidWebviewConnectionRetryTime: 1*1000, // Retry every 1 second
androidWebviewConnectTimeout: 10*1000, // Timeout after 10 seconds
})
})

Welcome! How can I help?

WebdriverIO AI Copilot