Capacidades
Uma capacidade é uma definição para uma interface remota. Ela ajuda o WebdriverIO a entender em qual ambiente de navegador ou móvel você deseja executar seus testes. As capacidades são menos cruciais ao desenvolver testes localmente, já que geralmente você os executa em uma única interface remota na maior parte do tempo, mas se tornam mais importantes ao executar um grande conjunto de testes de integração em CI/CD.
O formato de um objeto de capacidade é bem definido pela especificação WebDriver. O testrunner do WebdriverIO falhará rapidamente se as capacidades definidas pelo usuário não estiverem em conformidade com essa especificação.
Capacidades Personalizadas
Embora a quantidade de capacidades definidas fixas seja muito baixa, qualquer pessoa pode fornecer e aceitar capacidades personalizadas que são específicas para o driver de automação ou interface remota:
Extensões de Capacidades Específicas do Navegador
goog:chromeOptions
: extensões do Chromedriver, aplicáveis apenas para testes no Chromemoz:firefoxOptions
: extensões do Geckodriver, aplicáveis apenas para testes no Firefoxms:edgeOptions
: EdgeOptions para especificar o ambiente ao usar EdgeDriver para testar o Edge Chromium
Extensões de Capacidades de Fornecedores em Nuvem
sauce:options
: Sauce Labsbstack:options
: BrowserStacktb:options
: TestingBot- e muitos outros...
Extensões de Capacidades do Motor de Automação
Capacidades do WebdriverIO para gerenciar opções do driver do navegador
O WebdriverIO gerencia a instalação e execução do driver do navegador para você. O WebdriverIO usa uma capacidade personalizada que permite passar parâmetros para o driver.
wdio:chromedriverOptions
Opções específicas passadas para o Chromedriver ao iniciá-lo.
wdio:geckodriverOptions
Opções específicas passadas para o Geckodriver ao iniciá-lo.
wdio:edgedriverOptions
Opções específicas passadas para o Edgedriver ao iniciá-lo.
wdio:safaridriverOptions
Opções específicas passadas para o Safari ao iniciá-lo.
wdio:maxInstances
Número máximo de trabalhadores paralelos em execução para o navegador/capacidade específica. Tem precedência sobre maxInstances e maxInstancesPerCapability.
Tipo: number
wdio:specs
Define as especificações para execução de teste para aquele navegador/capacidade. Igual à opção de configuração regular specs
, mas específica para o navegador/capacidade. Tem precedência sobre specs
.
Tipo: (String | String[])[]
wdio:exclude
Exclui especificações da execução de teste para aquele navegador/capacidade. Igual à opção de configuração regular exclude
, mas específica para o navegador/capacidade. Tem precedência sobre exclude
.
Tipo: String[]
wdio:enforceWebDriverClassic
Por padrão, o WebdriverIO tenta estabelecer uma sessão WebDriver Bidi. Se você não prefere isso, pode definir este sinalizador para desativar esse comportamento.
Tipo: boolean
Opções Comuns do Driver
Embora todos os drivers ofereçam diferentes parâmetros para configuração, existem alguns comuns que o WebdriverIO entende e usa para configurar seu driver ou navegador:
cacheDir
O caminho para a raiz do diretório de cache. Este diretório é usado para armazenar todos os drivers que são baixados ao tentar iniciar uma sessão.
Tipo: string
Padrão: process.env.WEBDRIVER_CACHE_DIR || os.tmpdir()
binary
Caminho para um binário de driver personalizado. Se definido, o WebdriverIO não tentará baixar um driver, mas usará o fornecido por este caminho. Certifique-se de que o driver seja compatível com o navegador que você está usando.
Você pode fornecer esse caminho através das variáveis de ambiente CHROMEDRIVER_PATH
, GECKODRIVER_PATH
ou EDGEDRIVER_PATH
.
Tipo: string
Se o binary
do driver estiver definido, o WebdriverIO não tentará baixar um driver, mas usará o fornecido por este caminho. Certifique-se de que o driver seja compatível com o navegador que você está usando.
Opções de Driver Específicas do Navegador
Para propagar opções para o driver, você pode usar as seguintes capacidades personalizadas:
- Chrome ou Chromium:
wdio:chromedriverOptions
- Firefox:
wdio:geckodriverOptions
- Microsoft Edge:
wdio:edgedriverOptions
- Safari:
wdio:safaridriverOptions
- wdio:chromedriverOptions
- wdio:geckodriverOptions
- wdio:edgedriverOptions
- wdio:safaridriverOptions
adbPort
A porta na qual o driver ADB deve ser executado.
Exemplo: 9515
Tipo: number
urlBase
Prefixo do caminho URL base para comandos, p.ex. wd/url
.
Exemplo: /
Tipo: string
logPath
Escreve o log do servidor em um arquivo em vez de stderr, aumenta o nível de log para INFO
Tipo: string
logLevel
Define o nível de log. Opções possíveis ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, OFF
.
Tipo: string
verbose
Log detalhado (equivalente a --log-level=ALL
)
Tipo: boolean
silent
Sem log (equivalente a --log-level=OFF
)
Tipo: boolean
appendLog
Anexa ao arquivo de log em vez de reescrevê-lo.
Tipo: boolean
replayable
Log detalhado e não trunca strings longas para que o log possa ser reproduzido (experimental).
Tipo: boolean
readableTimestamp
Adiciona carimbos de data/hora legíveis ao log.
Tipo: boolean
enableChromeLogs
Mostra logs do navegador (substitui outras opções de log).
Tipo: boolean
bidiMapperPath
Caminho do mapeador bidi personalizado.
Tipo: string
allowedIps
Lista de permissões separada por vírgulas de endereços IP remotos que têm permissão para se conectar ao EdgeDriver.
Tipo: string[]
Padrão: ['']
allowedOrigins
Lista de permissões separada por vírgulas de origens de solicitação que têm permissão para se conectar ao EdgeDriver. Usar *
para permitir qualquer origem de host é perigoso!
Tipo: string[]
Padrão: ['*']
spawnOpts
Opções a serem passadas para o processo do driver.
Tipo: SpawnOptionsWithoutStdio | SpawnOptionsWithStdioTuple<StdioOption, StdioOption, StdioOption>
Padrão: undefined
Veja todas as opções do Geckodriver no pacote de driver oficial.
Veja todas as opções do Edgedriver no pacote de driver oficial.
Veja todas as opções do Safaridriver no pacote de driver oficial.
Capacidades Especiais para Casos de Uso Específicos
Esta é uma lista de exemplos que mostram quais capacidades precisam ser aplicadas para alcançar um determinado caso de uso.
Executar Navegador em Modo Headless
Executar um navegador em modo headless significa executar uma instância do navegador sem janela ou interface do usuário. Isso é usado principalmente em ambientes CI/CD onde nenhum display é utilizado. Para executar um navegador em modo headless, aplique as seguintes capacidades:
- Chrome
- Firefox
- Microsoft Edge
- Safari
{
browserName: 'chrome', // ou 'chromium'
'goog:chromeOptions': {
args: ['headless', 'disable-gpu']
}
}
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-headless']
}
browserName: 'msedge',
'ms:edgeOptions': {
args: ['--headless']
}
Parece que o Safari não suporta execução em modo headless.
Automatizar Diferentes Canais de Navegadores
Se você deseja testar uma versão de navegador que ainda não foi lançada como estável, por exemplo, Chrome Canary, você pode fazer isso definindo capacidades e apontando para o navegador que deseja iniciar, por exemplo:
- Chrome
- Firefox
- Microsoft Edge
- Safari
Ao testar no Chrome, o WebdriverIO baixará automaticamente a versão desejada do navegador e driver para você com base no browserVersion
definido, por exemplo:
{
browserName: 'chrome', // ou 'chromium'
browserVersion: '116' // ou '116.0.5845.96', 'stable', 'dev', 'canary', 'beta' ou 'latest' (mesmo que 'canary')
}
Se você deseja testar um navegador baixado manualmente, pode fornecer um caminho binário para o navegador via:
{
browserName: 'chrome', // ou 'chromium'
'goog:chromeOptions': {
binary: '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary'
}
}
Além disso, se você deseja usar um driver baixado manualmente, pode fornecer um caminho binário para o driver via:
{
browserName: 'chrome', // ou 'chromium'
'wdio:chromedriverOptions': {
binary: '/path/to/chromdriver'
}
}
Ao testar no Firefox, o WebdriverIO baixará automaticamente a versão desejada do navegador e driver para você com base no browserVersion
definido, por exemplo:
{
browserName: 'firefox',
browserVersion: '119.0a1' // ou 'latest'
}
Se você deseja testar uma versão baixada manualmente, pode fornecer um caminho binário para o navegador via:
{
browserName: 'firefox',
'moz:firefoxOptions': {
binary: '/Applications/Firefox\ Nightly.app/Contents/MacOS/firefox'
}
}
Além disso, se você deseja usar um driver baixado manualmente, pode fornecer um caminho binário para o driver via:
{
browserName: 'firefox',
'wdio:geckodriverOptions': {
binary: '/path/to/geckodriver'
}
}
Ao testar no Microsoft Edge, certifique-se de ter a versão desejada do navegador instalada em sua máquina. Você pode direcionar o WebdriverIO para o navegador a ser executado via:
{
browserName: 'msedge',
'ms:edgeOptions': {
binary: '/Applications/Microsoft\ Edge\ Canary.app/Contents/MacOS/Microsoft\ Edge\ Canary'
}
}
O WebdriverIO baixará automaticamente a versão desejada do driver para você com base no browserVersion
definido, por exemplo:
{
browserName: 'msedge',
browserVersion: '109' // ou '109.0.1467.0', 'stable', 'dev', 'canary', 'beta'
}
Além disso, se você deseja usar um driver baixado manualmente, pode fornecer um caminho binário para o driver via:
{
browserName: 'msedge',
'wdio:edgedriverOptions': {
binary: '/path/to/msedgedriver'
}
}
Ao testar no Safari, certifique-se de ter o Safari Technology Preview instalado em sua máquina. Você pode direcionar o WebdriverIO para essa versão via:
{
browserName: 'safari technology preview'
}
Estender Capacidades Personalizadas
Se você deseja definir seu próprio conjunto de capacidades para, por exemplo, armazenar dados arbitrários a serem usados dentro dos testes para essa capacidade específica, você pode fazer isso definindo:
export const config = {
// ...
capabilities: [{
browserName: 'chrome',
'custom:caps': {
// configurações personalizadas
}
}]
}
É recomendado seguir o protocolo W3C quando se trata de nomenclatura de capacidades, que requer um caractere :
(dois-pontos), denotando um namespace específico de implementação. Dentro de seus testes, você pode acessar sua capacidade personalizada através de, por exemplo:
browser.capabilities['custom:caps']
Para garantir a segurança de tipos, você pode estender a interface de capacidade do WebdriverIO via:
declare global {
namespace WebdriverIO {
interface Capabilities {
'custom:caps': {
// ...
}
}
}
}