getContext
Получение контекста текущей сессии.
Этот метод расширяет стандартную команду Appium context
/WebdriverIO getContext
, предоставляя возможность
получать подробную информацию о контексте, что упрощает работу с гибридными приложениями, использующими веб-представления.
Как работают контексты
Обратитесь к документации по гибридным приложениям для получения дополнительной информации. Ниже приведено объяснение сложностей, связанных с командой getContext
:
Для Android:
- Веб-представления могут содержать несколько страниц (как вкладки браузера), и идентификация правильной страницы требует дополнительных метаданных,
таких как
title
илиurl
. - Стандартные методы Appium предоставляют только базовые имена контекстов (например,
WEBVIEW_{packageName}
) без подробной информации о страницах внутри веб-представления.
Для iOS:
- Каждое веб-представление идент ифицируется общей строкой
WEBVIEW_{id}
, которая не указывает на его содержимое или экран приложения, к которому оно принадлежит.
Почему стоит использовать этот метод?
- Стандартное поведение:
- Возвращает текущий контекст в виде строки (например,
NATIVE_APP
илиWEBVIEW_{id}
).
- Возвращает текущий контекст в виде строки (например,
- Подробный контекст:
- Когда
returnDetailedContext
включен, извлекаются метаданные, такие как:- Android:
packageName
,title
,url
иwebviewPageId
. - iOS:
bundleId
,title
иurl
.
- Android:
- Когда
- Опции, специфичные для Android:
- Интервалы повторных попыток и тайм-ауты могут быть настроены для обработки задержек при инициализации веб-представления.
Примечания и ограничения
- Если
returnDetailedContext
не включен, метод ведет себя как стандартный метод AppiumgetContext
. - Если вы хотите использовать "стандартный" метод Appium
context
, вы можете использовать методdriver.getAppiumContext()
, см. также команду Appium Contexts. - Android: Опции, специфичные для Android (
androidWebviewConnectionRetryTime
иandroidWebviewConnectTimeout
), не влияют на iOS. - Выводит предупреждения, если найдено несколько или ни одного подробного контекста:
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.
Параметры
Имя | Тип | Детали |
---|---|---|
options необязательно | GetContextsOptions | Опции getContext (необязательно) |
options.returnDetailedContext необязательно | boolean | По умолчанию мы возвращаем только имя контекста на основе стандартного API Appium context , которое является только строкой. Если вы хотите получить подробную информацию о контексте, установите значение true . По умолчанию false (необязательно). |
options.androidWebviewConnectionRetryTime необязательно | number | Время в миллисекундах ожидания между каждой попыткой подключения к веб-представлению. По умолчанию 500 мс (необязательно). ТОЛЬКО ДЛЯ ANDROID |
options.androidWebviewConnectTimeout необязательно | number | Максимальное время в миллисекундах ожидания обнаружения страницы веб-представления. По умолчанию 5000 мс (необязательно). ТОЛЬКО ДЛЯ ANDROID |
Примеры
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
})
})