getContext
Отримати контекст поточного сеансу.
Цей метод розширює стандартну команду Appium context
/WebdriverIO getContext
, надаючи можливість
повертати детальну інформацію про контекст, що полегшує роботу з гібридними додатками, які використовують веб-перегляд.
Як працюють контексти
Зверніться до документації Hybrid Apps для отримання додаткової інформації. Нижче наведено пояснення проблем, пов'язаних з командою 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. - Виводить попередження, якщо знайдено кілька або жодного детального контексту:
Ми знайшли більше 1 детального контексту для поточного контексту '{context}'. Ми повернемо перший контекст.
Ми не отримали жодного детального контексту для поточного контексту '{context}'. Ми повернемо поточний контекст як рядок.
Параметри
Назва | Тип | Деталі |
---|---|---|
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
})
})