Перейти к основному содержимому

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:
    • Интервалы повторных попыток и тайм-ауты могут быть настроены для обработки задержек при инициализации веб-представления.
Примечания и ограничения
  • Если returnDetailedContext не включен, метод ведет себя как стандартный метод Appium getContext.
  • Если вы хотите использовать "стандартный" метод 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
})
})

Welcome! How can I help?

WebdriverIO AI Copilot