Intercept Tjänst
wdio-intercept-service är ett tredjepartspaket, för mer information se GitHub | npm
🕸 Fånga och utvärdera HTTP ajax-anrop i webdriver.io
Detta är ett plugin för webdriver.io. Om du inte känner till det än, kolla in det, det är ganska coolt.
Även om selenium och webdriver används för e2e och särskilt UI-testning, kanske du vill utvärdera HTTP-förfrågningar som görs av din klientkod (t.ex. när du inte har omedelbar UI-feedback, som i mätvärden eller spårningsanrop). Med wdio-intercept-service kan du fånga ajax HTTP-anrop som initieras av vissa användaråtgärder (t.ex. ett knapptryck, etc.) och göra påståenden om förfrågan och motsvarande svar senare.
Det finns dock en hake: du kan inte fånga HTTP-anrop som initieras vid sidladdning (som i de flesta SPA:er), eftersom det kräver viss inställning som bara kan göras efter att sidan har laddats (på grund av begränsningar i selenium). Det betyder att du bara kan fånga förfrågningar som initierades inuti ett test. Om du är okej med det kan detta plugin vara något för dig, så läs vidare.
Förutsättningar
- webdriver.io v5.x eller nyare.
Observera! Om du fortfarande använder webdriver.io v4, använd v2.x-grenen av detta plugin!
Installation
npm install wdio-intercept-service -D
Användning
Användning med WebDriver CLI
Det bör vara så enkelt som att lägga till wdio-intercept-service till din wdio.conf.js:
exports.config = {
// ...
services: ['intercept']
// ...
};
och då är du klar.
Användning med WebDriver Standalone
När du använder WebdriverIO Standalone måste funktionerna before och beforeTest / beforeScenario anropas manuellt.
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
});
När det är initierat läggs några relaterade funktioner till i din webbläsarkommandokedja (se API).
Snabbstart
Exempel på användning:
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
Få detaljer om förfrågningar:
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');