Ir para o conteúdo principal

O objeto do navegador

Estende: EventEmitter

O objeto do navegador é a instância de sessão que você usa para controlar o navegador ou o dispositivo móvel. Se você usar o executor de teste WDIO, poderá acessar a instância do WebDriver por meio do objeto browser ou driver global ou importá-lo usando @wdio/globals. Se você usar o WebdriverIO no modo autônomo, o objeto do navegador será 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 testes.

Propriedades

Um objeto de navegador tem as seguintes propriedades:

NomeTipoDetalhes
CapacidadesObjetoCapacidades atribuídas do 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
}
Capacidades SolicitadasObjetoCapacidades solicitadas do servidor remoto.
Exemplo:
{ browserName: 'chrome' }
sessionIdStringID de sessão atribuído pelo servidor remoto.
optionsObjectopções do WebdriverIO dependendo de como o objeto do navegador foi criado. Veja mais 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 instância do Chrome
isFirefoxBooleanIndica se esta instância do Firefox
isBidiBooleanIndica se esta sessão usa Bidi
isSauceBooleanIndica se esta sessão está em execução no Sauce Labs
isMacAppBooleanIndica se esta sessão está em execução para um aplicativo Mac nativo
isWindowsAppBooleanIndica se esta sessão está em execução para um aplicativo nativo do Windows
isMobileBooleanIndica uma sessão móvel. Veja mais em Mobile Flags.
isIOSBooleanIndica uma sessão iOS. Veja mais em Mobile Flags.
isAndroidBooleanIndica uma sessão do Android. Veja mais em Mobile Flags.
isNativeContextBooleanIndica se o celular está no contexto NATIVE_APP. Veja mais em Mobile Flags.
mobileContextstringO fornecerá o contexto atual em que o driver está, por exemplo NATIVE_APP, WEBVIEW_<packageName> para Android ou WEBVIEW_<pid> para iOS. Isso salvará um WebDriver extra em driver.getContext(). Veja mais em Mobile Flags.

Metódos

Com base no backend de automação usado para sua sessão, o WebdriverIO identifica quais Comandos de Protocolo serão anexados ao objeto do navegador. 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 interagir com o navegador ou elementos na página.

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

NomeParâmetrosDetalhes
addCommand- commandName (Type: String)
- fn (Type: Function)
- attachToElement (Type: boolean)
Permite definir comandos personalizados que podem ser chamados a partir do objeto do navegador para fins de composição. Leia mais no guia Comando personalizado.
overwriteCommand- commandName (Type: String)
- fn (Type: Function)
- attachToElement (Type: boolean)
Permite substituir 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 (Type: String)
- fn (Type: Function)
Permite definir uma estratégia de seletor personalizada, leia mais no guia Seletores.

Observações

Mobile Flags

Se precisar modificar seu teste com base no fato de sua sessão ser executada ou não em um dispositivo móvel, você pode acessar os sinalizadores 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 esses sinalizadores em seu teste assim:

// Note: `driver` is the equivalent to the `browser` object but semantically more correct
// you can choose which global variable you want to use
console.log(driver.isMobile) // outputs: true
console.log(driver.isIOS) // outputs: true
console.log(driver.isAndroid) // outputs: 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 esses sinalizadores para executar apenas determinados testes para determinados tipos de dispositivos:

// mytest.e2e.js
describe('my test', () => {
// ...
// only run test with Android devices
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})

Eventos

O objeto do navegador é um EventEmitter e alguns eventos são emitidos para seus casos de uso.

Aqui está uma lista de eventos. Tenha em mente que esta ainda não é a lista completa de eventos disponíveis. Sinta-se à vontade para contribuir para atualizar 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
  • método: o método HTTP usado para enviar a solicitação de comando, por exemplo, POST
  • endpoint: o ponto final 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 do WebDriver Classic. Ele contém as mesmas informações do evento comando com a adição das seguintes informações:

  • result: o resultado do comando

bidiCommand

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

  • método: 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, argumento inválido
  • mensagem: detalhes sobre o erro
  • stacktrace: a stack trace

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 repetição pode notificá-lo quando o WebdriverIO tenta executar o comando novamente, 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á feitas.

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

request.performance

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

  • durationMillisecond: Duração 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. Ele aumentará quando o WebDriverIO tentar novamente nos bastidores.
  • sucesso: 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 obter mais informações.

Welcome! How can I help?

WebdriverIO AI Copilot