Pular para o conteúdo principal

O Objeto Browser

Estende: EventEmitter

O objeto browser é a instância de sessão que você usa para controlar o navegador ou dispositivo móvel. Se você usa o executor de teste WDIO, pode acessar a instância WebDriver através do objeto global browser ou driver ou importá-lo usando @wdio/globals. Se você usa o WebdriverIO em modo autônomo, o objeto browser é retornado pelo método remote.

A sessão é inicializada pelo executor de teste. O mesmo vale para encerrar a sessão. Isso também é feito pelo processo do executor de teste.

Propriedades

Um objeto browser tem as seguintes propriedades:

NomeTipoDetalhes
capabilitiesObjectCapacidades atribuídas pelo servidor remoto.
Exemplo:
{
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
}
requestedCapabilitiesObjectCapacidades solicitadas ao servidor remoto.
Exemplo:
{ browserName: 'chrome' }
sessionIdStringID de sessão atribuído pelo servidor remoto.
optionsObjectOpções do WebdriverIO dependendo de como o objeto browser foi criado. Veja mais em tipos de configuração.
commandListString[]Uma lista de comandos registrados na instância do navegador
isW3CBooleanIndica se esta é uma sessão W3C
isChromeBooleanIndica se esta é uma instância do Chrome
isFirefoxBooleanIndica se esta é uma instância do Firefox
isBidiBooleanIndica se esta sessão usa Bidi
isSauceBooleanIndica se esta sessão está rodando no Sauce Labs
isMacAppBooleanIndica se esta sessão está rodando para um aplicativo nativo Mac
isWindowsAppBooleanIndica se esta sessão está rodando para um aplicativo nativo Windows
isMobileBooleanIndica uma sessão móvel. Veja mais em Flags Móveis.
isIOSBooleanIndica uma sessão iOS. Veja mais em Flags Móveis.
isAndroidBooleanIndica uma sessão Android. Veja mais em Flags Móveis.
isNativeContextBooleanIndica se o dispositivo móvel está no contexto NATIVE_APP. Veja mais em Flags Móveis.
mobileContextstringFornecerá o contexto atual em que o driver está, por exemplo NATIVE_APP, WEBVIEW_<packageName> para Android ou WEBVIEW_<pid> para iOS. Isso economizará um WebDriver extra para driver.getContext(). Veja mais em Flags Móveis.

Métodos

Com base no backend de automação usado para sua sessão, o WebdriverIO identifica quais Comandos de Protocolo serão anexados ao objeto browser. Por exemplo, se você executar uma sessão automatizada no Chrome, terá acesso a comandos específicos do Chromium como elementHover, mas não a nenhum dos comandos do Appium.

Além disso, o WebdriverIO fornece um conjunto de métodos convenientes que são recomendados para uso, para interagir com o navegador ou elementos na página.

Além disso, os seguintes comandos estão disponíveis:

NomeParâmetrosDetalhes
addCommand- commandName (Tipo: String)
- fn (Tipo: Function)
- attachToElement (Tipo: boolean)
Permite definir comandos personalizados que podem ser chamados a partir do objeto browser para fins de composição. Leia mais no guia Comando Personalizado.
overwriteCommand- commandName (Tipo: String)
- fn (Tipo: Function)
- attachToElement (Tipo: boolean)
Permite sobrescrever qualquer comando do navegador com funcionalidade personalizada. Use com cuidado, pois pode confundir os usuários do framework. Leia mais no guia Comando Personalizado.
addLocatorStrategy- strategyName (Tipo: String)
- fn (Tipo: Function)
Permite definir uma estratégia de seletor personalizada, leia mais no guia Seletores.

Observações

Flags Móveis

Se você precisa modificar seu teste com base no fato de sua sessão estar sendo executada em um dispositivo móvel ou não, você pode acessar as flags móveis para verificar.

Por exemplo, dada esta configuração:

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

Você pode acessar essas flags em seu teste da seguinte forma:

// Nota: `driver` é equivalente ao objeto `browser`, mas semanticamente mais correto
// você pode escolher qual variável global deseja usar
console.log(driver.isMobile) // saída: true
console.log(driver.isIOS) // saída: true
console.log(driver.isAndroid) // saída: false

Isso pode ser útil se, por exemplo, você quiser definir seletores em seus objetos de página com base no tipo de dispositivo, assim:

// 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}`)
}
// ...
}

Você também pode usar essas flags para executar apenas certos testes para certos tipos de dispositivos:

// mytest.e2e.js
describe('my test', () => {
// ...
// executar teste apenas com dispositivos Android
if (driver.isAndroid) {
it('testa algo apenas para Android', () => {
// ...
})
}
// ...
})

Eventos

O objeto browser é um EventEmitter e vários eventos são emitidos para seus casos de uso.

Aqui está uma lista de eventos. Tenha em mente que esta não é a lista completa de eventos disponíveis ainda. Sinta-se à vontade para contribuir atualizando o documento, adicionando descrições de mais eventos aqui.

command

Este evento é emitido sempre que o WebdriverIO envia um comando WebDriver Classic. Ele contém as seguintes informações:

  • command: o nome do comando, por exemplo navigateTo
  • method: o método HTTP usado para enviar a solicitação de comando, por exemplo POST
  • endpoint: o endpoint do comando, por exemplo /session/fc8dbda381a8bea36a225bd5fd0c069b/url
  • body: a carga útil do comando, por exemplo { url: 'https://webdriver.io' }

result

Este evento é emitido sempre que o WebdriverIO recebe um resultado de um comando WebDriver Classic. Ele contém as mesmas informações que o evento command com o acréscimo das seguintes informações:

  • result: o resultado do comando

bidiCommand

Este evento é emitido sempre que o WebdriverIO envia um comando WebDriver Bidi para o driver do navegador. Ele contém informações sobre:

  • method: método de comando WebDriver Bidi
  • params: parâmetro de comando associado (veja API)

bidiResult

Em caso de execução bem-sucedida do comando, a carga útil do evento será:

  • type: success
  • id: o id do comando
  • result: o resultado do comando (veja API)

Em caso de erro de comando, a carga útil do evento será:

  • type: error
  • id: o id do comando
  • error: o código de erro, por exemplo invalid argument
  • message: detalhes sobre o erro
  • stacktrace: um rastreamento de pilha

request.start

Este evento é disparado antes que uma solicitação WebDriver seja enviada ao driver. Ele contém informações sobre a solicitação e sua carga útil.

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

request.end

Este evento é disparado quando a solicitação ao driver recebe uma resposta. O objeto de evento contém o corpo da resposta como resultado ou um erro se o comando WebDriver falhou.

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

request.retry

O evento de retry pode notificá-lo quando o WebdriverIO tenta repetir a execução do comando, por exemplo, devido a um problema de rede. Ele contém informações sobre o erro que causou a nova tentativa e a quantidade de tentativas já realizadas.

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

request.performance

Este é um evento para medir operações de nível WebDriver. Sempre que o WebdriverIO envia uma solicitação ao backend WebDriver, este evento será emitido com algumas informações úteis:

  • durationMillisecond: Duração de tempo da solicitação em milissegundos.
  • error: Objeto de erro se a solicitação falhou.
  • request: Objeto de solicitação. Você pode encontrar url, método, cabeçalhos, etc.
  • retryCount: Se for 0, a solicitação foi a primeira tentativa. Aumentará quando o WebDriverIO repetir internamente.
  • success: Booleano para representar se a solicitação foi bem-sucedida ou não. Se for false, a propriedade error também será fornecida.

Um exemplo de evento:

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

Comandos Personalizados

Você pode definir comandos personalizados no escopo do navegador para abstrair fluxos de trabalho comumente usados. Confira nosso guia sobre Comandos Personalizados para mais informações.

Welcome! How can I help?

WebdriverIO AI Copilot