Vai al contenuto principale

getContext

Recupera il contesto della sessione corrente.

Questo metodo migliora il comando Appium predefinito context/WebdriverIO getContext fornendo un'opzione per restituire informazioni dettagliate sul contesto, facilitando il lavoro con app ibride che utilizzano webview.

Come funzionano i contesti

Consulta la documentazione sulle App Ibride per maggiori informazioni. Di seguito è riportata una spiegazione delle sfide associate al comando getContext:

Per Android:

  • Le webview possono contenere più pagine (come le schede del browser), e l'identificazione della pagina corretta richiede metadati aggiuntivi come title o url.
  • I metodi predefiniti di Appium forniscono solo nomi di contesto di base (es. WEBVIEW_{packageName}) senza informazioni dettagliate sulle pagine all'interno della webview.

Per iOS:

  • Ogni webview è identificata da una stringa generica WEBVIEW_{id}, che non indica il suo contenuto o la schermata dell'app a cui appartiene.

Perché utilizzare questo metodo?

  • Comportamento predefinito:
    • Restituisce il contesto corrente come stringa (es. NATIVE_APP o WEBVIEW_{id}).
  • Contesto dettagliato:
    • Quando returnDetailedContext è abilitato, recupera metadati come:
      • Android: packageName, title, url e webviewPageId.
      • iOS: bundleId, title e url.
  • Opzioni specifiche per Android:
    • Gli intervalli di ripetizione e i timeout possono essere personalizzati per gestire i ritardi nell'inizializzazione della webview.
Note e limitazioni
  • Se returnDetailedContext non è abilitato, il metodo si comporta come il metodo Appium predefinito getContext.
  • Se desideri utilizzare il metodo Appium "predefinito" context, puoi utilizzare il metodo driver.getAppiumContext(), vedi anche il comando Appium Contexts.
  • Android: Le opzioni specifiche per Android (androidWebviewConnectionRetryTime e androidWebviewConnectTimeout) non hanno effetto su iOS.
  • Mostra avvisi se vengono trovati più contesti dettagliati o nessuno:
    • Abbiamo trovato più di 1 contesto dettagliato per il contesto corrente '{context}'. Restituiremo il primo contesto.
    • Non abbiamo ricevuto alcun contesto dettagliato per il contesto corrente '{context}'. Restituiremo il contesto corrente come stringa.
Parametri
NomeTipoDettagli
options
opzionale
GetContextsOptionsLe opzioni di getContext (opzionale)
options.returnDetailedContext
opzionale
booleanPer impostazione predefinita, restituiamo solo il nome del contesto basato sull'API Appium predefinita context, che è solo una stringa. Se desideri ricevere informazioni dettagliate sul contesto, imposta questo valore su true. L'impostazione predefinita è false (opzionale).
options.androidWebviewConnectionRetryTime
opzionale
numberIl tempo in millisecondi da attendere tra ogni nuovo tentativo di connessione alla webview. L'impostazione predefinita è 500 ms (opzionale).
SOLO PER ANDROID
options.androidWebviewConnectTimeout
opzionale
numberIl tempo massimo in millisecondi da attendere affinché una pagina della webview venga rilevata. L'impostazione predefinita è 5000 ms (opzionale).
SOLO PER ANDROID
Esempi
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