feat(page): introduce waitForRequest and waitForResponse methods (#2776)

This patch introduces `page.waitForRequest` and `page.waitForResponse` helper methods.

Fixes #2362
This commit is contained in:
Matthew Shirley
2018-07-12 14:36:31 -07:00
committed by Andrey Lushnikov
parent 3ebbf125ff
commit 726c8dc046
4 changed files with 172 additions and 0 deletions

View File

@@ -786,6 +786,89 @@ module.exports.addTests = function({testRunner, expect, puppeteer, DeviceDescrip
});
});
describe('Page.waitForRequest', function() {
it('should work', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [request] = await Promise.all([
page.waitForRequest(server.PREFIX + '/404'),
page.evaluate(() => fetch('/404', {method: 'GET'}))
]);
expect(request.method()).toBe('GET');
expect(request.url()).toBe(server.PREFIX + '/404');
});
it('should work with regex pattern', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [request] = await Promise.all([
page.waitForRequest(request => new RegExp(`${server.PREFIX}/(200|404)`).test(request.url())),
page.evaluate(() => fetch('/404', {method: 'GET'}))
]);
expect(request.method()).toBe('GET');
expect(request.url()).toBe(server.PREFIX + '/404');
});
it('should work with predicate', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [request] = await Promise.all([
page.waitForRequest(request => request.url() === server.PREFIX + '/404' && request.method() === 'PATCH'),
page.evaluate(() => fetch('/404', {method: 'PATCH'}))
]);
expect(request.method()).toBe('PATCH');
expect(request.url()).toBe(server.PREFIX + '/404');
});
it('should work with no timeout', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [request] = await Promise.all([
page.waitForRequest(server.PREFIX + '/404', { timeout: 0}),
page.waitFor(50),
page.evaluate(() => fetch('/404', {method: 'GET'}))
]);
expect(request.method()).toBe('GET');
expect(request.url()).toBe(server.PREFIX + '/404');
});
});
describe('Page.waitForResponse', function() {
it('should work', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [response] = await Promise.all([
page.waitForResponse(server.PREFIX + '/grid.html'),
page.waitFor(100),
page.evaluate(() => fetch('/grid.html', {method: 'GET'}))
]);
expect(response.ok()).toBe(true);
expect(response.url()).toBe(server.PREFIX + '/grid.html');
});
it('should work with regex', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [response] = await Promise.all([
page.waitForResponse(response => new RegExp(`${server.PREFIX}/(get|grid.html)`).test(response.url())),
page.waitFor(100),
page.evaluate(() => fetch('/grid.html', {method: 'GET'}))
]);
expect(response.ok()).toBe(true);
expect(response.url()).toBe(server.PREFIX + '/grid.html');
});
it('should work with predicate', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [response] = await Promise.all([
page.waitForResponse(response => response.url() === server.PREFIX + '/grid.html' && response.status() === 200),
page.waitFor(100),
page.evaluate(() => fetch('/grid.html', {method: 'PATCH'}))
]);
expect(response.ok()).toBe(true);
expect(response.url()).toBe(server.PREFIX + '/grid.html');
});
it('should work with no timeout', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [response] = await Promise.all([
page.waitForResponse(server.PREFIX + '/grid.html', { timeout: 0}),
page.waitFor(50),
page.evaluate(() => fetch('/grid.html', {method: 'GET'}))
]);
expect(response.ok()).toBe(true);
expect(response.url()).toBe(server.PREFIX + '/grid.html');
});
});
describe('Page.goBack', function() {
it('should work', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);