Serviço de Interceptação
wdio-intercept-service é um pacote de terceiros, para mais informações, consulte GitHub | npm
🕸 Capture e verifique chamadas HTTP ajax em webdriver.io
Este é um plugin para webdriver.io. Se você ainda não o conhece, confira, é muito legal.
Embora o selenium e o webdriver sejam usados para testes e2e e especialmente testes de UI, você pode querer avaliar as requisições HTTP feitas pelo seu código cliente (por exemplo, quando você não tem feedback imediato da UI, como em métricas ou chamadas de rastreamento). Com wdio-intercept-service, você pode interceptar chamadas HTTP ajax iniciadas por alguma ação do usuário (por exemplo, um pressionamento de botão, etc.) e fazer afirmações sobre a requisição e respostas correspondentes mais tarde.
Há um problema, no entanto: você não pode interceptar chamadas HTTP que são iniciadas no carregamento da página (como na maioria dos SPAs), pois requer algum trabalho de configuração que só pode ser feito após o carregamento da página (devido a limitações no selenium). Isso significa que você só pode capturar requisições que foram iniciadas dentro de um teste. Se você estiver bem com isso, este plugin pode ser para você, então continue lendo.
Pré-requisitos
- webdriver.io v5.x ou mais recente.
Atenção! Se você ainda estiver usando webdriver.io v4, use a branch v2.x deste plugin!
Instalação
npm install wdio-intercept-service -D
Uso
Uso com WebDriver CLI
Deve ser tão fácil quanto adicionar wdio-intercept-service ao seu wdio.conf.js:
exports.config = {
// ...
services: ['intercept']
// ...
};
e você está pronto.
Uso com WebDriver Standalone
Ao usar o WebdriverIO Standalone, as funções before e beforeTest / beforeScenario precisam ser chamadas manualmente.
import { remote } from 'webdriverio';
import WebdriverAjax from 'wdio-intercept-service'
const WDIO_OPTIONS = {
port: 9515,
path: '/',
capabilities: {
browserName: 'chrome'
},
}
let browser;
const interceptServiceLauncher = WebdriverAjax();
beforeAll(async () => {
browser = await remote(WDIO_OPTIONS)
interceptServiceLauncher.before(null, null, browser)
})
beforeEach(async () => {
interceptServiceLauncher.beforeTest()
})
afterAll(async () => {
await client.deleteSession()
});
describe('', async () => {
... // See example usage
});
Uma vez inicializado, algumas funções relacionadas são adicionadas à sua cadeia de comandos do navegador (veja API).
Início Rápido
Exemplo de uso:
browser.url('http://foo.bar');
browser.setupInterceptor(); // capture ajax calls
browser.expectRequest('GET', '/api/foo', 200); // expect GET request to /api/foo with 200 statusCode
browser.expectRequest('POST', '/api/foo', 400); // expect POST request to /api/foo with 400 statusCode
browser.expectRequest('GET', /\/api\/foo/, 200); // can validate a URL with regex, too
browser.click('#button'); // button that initiates ajax request
browser.pause(1000); // maybe wait a bit until request is finished
browser.assertRequests(); // validate the requests
Obtenha detalhes sobre as requisições:
browser.url('http://foo.bar')
browser.setupInterceptor();
browser.click('#button')
browser.pause(1000);
var request = browser.getRequest(0);
assert.equal(request.method, 'GET');
assert.equal(request.response.headers['content-length'], '42');
Navegadores suportados
Deve funcionar com versões mais recentes de todos os navegadores. Por favor, reporte um problema se não parecer funcionar com o seu.
API
Consulte o arquivo de declaração TypeScript para obter a sintaxe completa dos comandos personalizados adicionados ao objeto de navegador WebdriverIO. Em geral, qualquer método que aceita um objeto "options" como parâmetro pode ser chamado sem esse parâmetro para obter o comportamento padrão. Esses objetos "options opcionais" são seguidos por ?: = {} e os valores padrão inferidos são descritos para cada método.