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
titleourl. - 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_APPoWEBVIEW_{id}).
- Restituisce il contesto corrente come stringa (es.
- Contesto dettagliato:
- Quando
returnDetailedContextè abilitato, recupera metadati come:- Android:
packageName,title,urlewebviewPageId. - iOS:
bundleId,titleeurl.
- 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
returnDetailedContextnon è 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 (
androidWebviewConnectionRetryTimeeandroidWebviewConnectTimeout) 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 |
|---|---|---|
optionsopzionale | GetContextsOptions | Le opzioni di getContext (opzionale) |
options.returnDetailedContextopzionale | 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.androidWebviewConnectionRetryTimeopzionale | 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.androidWebviewConnectTimeoutopzionale | 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
})
})