mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
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:
committed by
Andrey Lushnikov
parent
3ebbf125ff
commit
726c8dc046
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user