Przejdź do głównej treści

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 lub url.
  • 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 lub WEBVIEW_{id}).
  • Szczegółowy kontekst:
    • Gdy włączona jest opcja returnDetailedContext, pobiera metadane takie jak:
      • Android: packageName, title, url oraz webviewPageId.
      • iOS: bundleId, title oraz url.
  • 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 Appium getContext.
  • Jeśli chcesz użyć "domyślnej" metody Appium context, możesz użyć metody driver.getAppiumContext(), zobacz również polecenie Appium Contexts.
  • Android: Opcje specyficzne dla Androida (androidWebviewConnectionRetryTime i androidWebviewConnectTimeout) 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
NazwaTypSzczegóły
options
opcjonalny
GetContextsOptionsOpcje getContext (opcjonalne)
options.returnDetailedContext
opcjonalny
booleanDomyś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
numberCzas 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
numberMaksymalny 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
})
})

Welcome! How can I help?

WebdriverIO AI Copilot