getContext
Pobierz kontekst bieżącej sesji.
Ta metoda rozszerza domyślne polecenie Appium context
/WebdriverIO getContext
, oferując opcję
zwrotu szczegółowych informacji o kontekście, co ułatwia pracę z aplikacjami hybrydowymi wykorzystującymi webview.
Jak działają konteksty
Więcej informacji znajdziesz w dokumentacji aplikacji hybrydowych. Poniżej wyjaśniono wyzwania związane z poleceniem getContext
:
Dla Androida:
- Webview może zawierać wiele stron (podobnie jak karty przeglądarki), a identyfikacja właściwej strony wymaga dodatkowych metadanych,
takich jak
title
luburl
. - Domyślne metody Appium dostarczają tylko podstawowe nazwy kontekstów (np.
WEBVIEW_{packageName}
) bez szczegółowych informacji o stronach wewnątrz webview.
Dla iOS:
- Każdy webview jest identyfikowany przez ogólny ciąg znaków
WEBVIEW_{id}
, który nie wskazuje jego zawartości ani ekranu aplikacji, do którego należy.
Dlaczego warto używać tej metody?
- Domyślne zachowanie:
- Zwraca bieżący kontekst jako ciąg znaków (np.
NATIVE_APP
lubWEBVIEW_{id}
).
- Zwraca bieżący kontekst jako ciąg znaków (np.
- Szczegółowy kontekst:
- Gdy włączona jest opcja
returnDetailedContext
, pobiera metadane takie jak:- Android:
packageName
,title
,url
orazwebviewPageId
. - iOS:
bundleId
,title
orazurl
.
- Android:
- Gdy włączona jest opcja
- Opcje specyficzne dla Androida:
- Interwały ponownych prób i limity czasu można dostosować, aby obsłużyć opóźnienia w inicjalizacji webview.
Uwagi i ograniczenia
- Jeśli opcja
returnDetailedContext
nie jest włączona, metoda działa jak domyślna metoda AppiumgetContext
. - Jeśli chcesz użyć "domyślnej" metody Appium
context
, możesz użyć metodydriver.getAppiumContext()
, zobacz również polecenie Appium Contexts. - Android: Opcje specyficzne dla Androida (
androidWebviewConnectionRetryTime
iandroidWebviewConnectTimeout
) nie mają wpływu na iOS. - Wyświetla ostrzeżenia, jeśli znaleziono wiele lub żadnych szczegółowych kontekstów:
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.
Parametry
Nazwa | Typ | Szczegóły |
---|---|---|
options opcjonalny | GetContextsOptions | Opcje getContext (opcjonalne) |
options.returnDetailedContext opcjonalny | boolean | Domyślnie zwracamy tylko nazwę kontekstu bazującą na domyślnym API Appium context , które jest tylko ciągiem znaków. Jeśli chcesz otrzymać szczegółowe informacje o kontekście, ustaw tę wartość na true . Domyślnie jest false (opcjonalne). |
options.androidWebviewConnectionRetryTime opcjonalny | number | Czas w milisekundach oczekiwania między każdą próbą połączenia z widokiem webview. Domyślnie 500 ms (opcjonalne). TYLKO DLA ANDROIDA |
options.androidWebviewConnectTimeout opcjonalny | number | Maksymalny czas w milisekundach oczekiwania na wykrycie strony widoku webview. Domyślnie 5000 ms (opcjonalne). TYLKO DLA ANDROIDA |
Przykłady
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
})
})