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
ourl
. - 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
oWEBVIEW_{id}
).
- Restituisce il contesto corrente come stringa (es.
- Contesto dettagliato:
- Quando
returnDetailedContext
è abilitato, recupera metadati come:- Android:
packageName
,title
,url
ewebviewPageId
. - iOS:
bundleId
,title
eurl
.
- Android:
- Quando
- 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 predefinitogetContext
. - Se desideri utilizzare il metodo Appium "predefinito"
context
, puoi utilizzare il metododriver.getAppiumContext()
, vedi anche il comando Appium Contexts. - Android: Le opzioni specifiche per Android (
androidWebviewConnectionRetryTime
eandroidWebviewConnectTimeout
) 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
Nome | Tipo | Dettagli |
---|---|---|
options opzionale | GetContextsOptions | Le opzioni di getContext (opzionale) |
options.returnDetailedContext opzionale | boolean | Per 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 | number | Il 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 | number | Il 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
})
})