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

Объект Browser

Наследует: EventEmitter

Объект browser — это экземпляр сессии, который вы используете для управления браузером или мобильным устройством. Если вы используете тест-раннер WDIO, вы можете получить доступ к экземпляру WebDriver через глобальные объекты browser или driver, либо импортировать его с помощью @wdio/globals. Если вы используете WebdriverIO в автономном режиме, объект browser возвращается методом remote.

Сессия инициализируется тест-раннером. То же самое касается завершения сессии. Это также выполняется процессом тест-раннера.

Свойства

Объект browser имеет следующие свойства:

ИмяТипПодробности
capabilitiesObjectНазначенные возможности с удаленного сервера.
Пример:
{
acceptInsecureCerts: false,
browserName: 'chrome',
browserVersion: '105.0.5195.125',
chrome: {
chromedriverVersion: '105.0.5195.52',
userDataDir: '/var/folders/3_/pzc_f56j15vbd9z3r0j050sh0000gn/T/.com.google.Chrome.76HD3S'
},
'goog:chromeOptions': { debuggerAddress: 'localhost:64679' },
networkConnectionEnabled: false,
pageLoadStrategy: 'normal',
platformName: 'mac os x',
proxy: {},
setWindowRect: true,
strictFileInteractability: false,
timeouts: { implicit: 0, pageLoad: 300000, script: 30000 },
unhandledPromptBehavior: 'dismiss and notify',
'webauthn:extension:credBlob': true,
'webauthn:extension:largeBlob': true,
'webauthn:virtualAuthenticators': true
}
requestedCapabilitiesObjectЗапрошенные возможности с удаленного сервера.
Пример:
{ browserName: 'chrome' }
sessionIdStringИдентификатор сессии, назначенный с удаленного сервера.
optionsObjectОпции WebdriverIO в зависимости от способа создания объекта browser. Подробнее в типах настройки.
commandListString[]Список команд, зарегистрированных для экземпляра браузера
isW3CBooleanУказывает, является ли это сессией W3C
isChromeBooleanУказывает, является ли это экземпляром Chrome
isFirefoxBooleanУказывает, является ли это экземпляром Firefox
isBidiBooleanУказывает, использует ли эта сессия Bidi
isSauceBooleanУказывает, запущена ли эта сессия на Sauce Labs
isMacAppBooleanУказывает, запущена ли эта сессия для нативного приложения Mac
isWindowsAppBooleanУказывает, запущена ли эта сессия для нативного приложения Windows
isMobileBooleanУказывает на мобильную сессию. Подробнее в разделе Мобильные флаги.
isIOSBooleanУказывает на сессию iOS. Подробнее в разделе Мобильные флаги.
isAndroidBooleanУказывает на сессию Android. Подробнее в разделе Мобильные флаги.
isNativeContextBooleanУказывает, находится ли мобильное устройство в контексте NATIVE_APP. Подробнее в разделе Мобильные флаги.
mobileContextstringПредоставляет текущий контекст, в котором находится драйвер, например NATIVE_APP, WEBVIEW_<packageName> для Android или WEBVIEW_<pid> для iOS. Это сэкономит дополнительный вызов WebDriver к driver.getContext(). Подробнее в разделе Мобильные флаги.

Методы

В зависимости от используемого для вашей сессии автоматизационного бэкенда, WebdriverIO определяет, какие Команды протокола будут прикреплены к объекту браузера. Например, если вы запускаете автоматизированную сессию в Chrome, у вас будет доступ к специфичным для Chromium командам, таким как elementHover, но не к какой-либо из команд Appium.

Кроме того, WebdriverIO предоставляет набор удобных методов, которые рекомендуется использовать для взаимодействия с браузером или элементами на странице.

Помимо этого доступны следующие команды:

ИмяПараметрыПодробности
addCommand- commandName (Тип: String)
- fn (Тип: Function)
- attachToElement (Тип: boolean)
Позволяет определять пользовательские команды, которые можно вызывать из объекта браузера в целях композиции. Подробнее в руководстве Пользовательские команды.
overwriteCommand- commandName (Тип: String)
- fn (Тип: Function)
- attachToElement (Тип: boolean)
Позволяет перезаписать любую команду браузера пользовательской функциональностью. Используйте осторожно, так как это может запутать пользователей фреймворка. Подробнее в руководстве Пользовательские команды.
addLocatorStrategy- strategyName (Тип: String)
- fn (Тип: Function)
Позволяет определить пользовательскую стратегию селектора. Подробнее в руководстве Селекторы.

Примечания

Мобильные флаги

Если вам нужно изменить ваш тест в зависимости от того, выполняется ли ваша сессия на мобильном устройстве, вы можете использовать мобильные флаги для проверки.

Например, учитывая эту конфигурацию:

// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}

Вы можете получить доступ к этим флагам в своем тесте следующим образом:

// Примечание: `driver` эквивалентен объекту `browser`, но семантически более корректен
// вы можете выбрать, какую глобальную переменную хотите использовать
console.log(driver.isMobile) // выводит: true
console.log(driver.isIOS) // выводит: true
console.log(driver.isAndroid) // выводит: false

Это может быть полезно, например, если вы хотите определить селекторы в ваших объектах страниц в зависимости от типа устройства, например:

// mypageobject.page.js
import Page from './page'

class LoginPage extends Page {
// ...
get username() {
const selectorAndroid = 'new UiSelector().text("Cancel").className("android.widget.Button")'
const selectorIOS = 'UIATarget.localTarget().frontMostApp().mainWindow().buttons()[0]'
const selectorType = driver.isAndroid ? 'android' : 'ios'
const selector = driver.isAndroid ? selectorAndroid : selectorIOS
return $(`${selectorType}=${selector}`)
}
// ...
}

Вы также можете использовать эти флаги для запуска только определенных тестов для определенных типов устройств:

// mytest.e2e.js
describe('my test', () => {
// ...
// запускать тест только на устройствах Android
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})

События

Объект browser является EventEmitter, и для ваших случаев использования генерируется несколько событий.

Вот список событий. Имейте в виду, что это еще не полный список доступных событий. Не стесняйтесь вносить свой вклад, добавляя описания других событий здесь.

command

Это событие генерируется всякий раз, когда WebdriverIO отправляет классическую команду WebDriver. Оно содержит следующую информацию:

  • command: имя команды, например, navigateTo
  • method: HTTP-метод, использованный для отправки запроса команды, например, POST
  • endpoint: конечная точка команды, например, /session/fc8dbda381a8bea36a225bd5fd0c069b/url
  • body: полезная нагрузка команды, например, { url: 'https://webdriver.io' }

result

Это событие генерируется всякий раз, когда WebdriverIO получает результат классической команды WebDriver. Оно содержит ту же информацию, что и событие command, с добавлением следующей информации:

  • result: результат команды

bidiCommand

Это событие генерируется всякий раз, когда WebdriverIO отправляет команду WebDriver Bidi драйверу браузера. Оно содержит информацию о:

  • method: метод команды WebDriver Bidi
  • params: связанные параметры команды (см. API)

bidiResult

В случае успешного выполнения команды, полезная нагрузка события будет:

  • type: success
  • id: идентификатор команды
  • result: результат команды (см. API)

В случае ошибки команды, полезная нагрузка события будет:

  • type: error
  • id: идентификатор команды
  • error: код ошибки, например, invalid argument
  • message: детали об ошибке
  • stacktrace: трассировка стека

request.start

Это событие срабатывает до того, как запрос WebDriver отправляется драйверу. Оно содержит информацию о запросе и его полезной нагрузке.

browser.on('request.start', (ev: RequestInit) => {
// ...
})

request.end

Это событие срабатывает, когда запрос к драйверу получает ответ. Объект события содержит либо тело ответа в качестве результата, либо ошибку, если команда WebDriver не удалась.

browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})

request.retry

Событие повторной попытки может уведомить вас, когда WebdriverIO пытается повторно выполнить команду, например, из-за проблемы с сетью. Оно содержит информацию об ошибке, которая вызвала повторную попытку, и количество уже выполненных повторных попыток.

browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})

request.performance

Это событие для измерения операций на уровне WebDriver. Всякий раз, когда WebdriverIO отправляет запрос в бэкенд WebDriver, это событие будет генерироваться с некоторой полезной информацией:

  • durationMillisecond: Продолжительность запроса в миллисекундах.
  • error: Объект ошибки, если запрос не удался.
  • request: Объект запроса. Вы можете найти url, метод, заголовки и т.д.
  • retryCount: Если это 0, запрос был первой попыткой. Увеличивается, когда WebDriverIO повторяет попытку внутри себя.
  • success: Логическое значение, представляющее успешность запроса. Если false, свойство error также будет предоставлено.

Пример события:

Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},

Пользовательские команды

Вы можете установить пользовательские команды в области действия браузера для абстрагирования часто используемых рабочих процессов. Ознакомьтесь с нашим руководством по Пользовательским командам для получения дополнительной информации.

Welcome! How can I help?

WebdriverIO AI Copilot