mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat(page): introduce page.setDefaultTimeout (#3854)
Method `page.setDefaultTimeout` overrides default 30 seconds timeout for all `page.waitFor*` methods, including navigation and waiting for selectors. Fix #3319.
This commit is contained in:
@@ -118,6 +118,25 @@ module.exports.addTests = function({testRunner, expect}) {
|
||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should fail when exceeding default maximum timeout', async({page, server}) => {
|
||||
// Hang for request to the empty.html
|
||||
server.setRoute('/empty.html', (req, res) => { });
|
||||
let error = null;
|
||||
page.setDefaultTimeout(1);
|
||||
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should prioritize default navigation timeout over default timeout', async({page, server}) => {
|
||||
// Hang for request to the empty.html
|
||||
server.setRoute('/empty.html', (req, res) => { });
|
||||
let error = null;
|
||||
page.setDefaultTimeout(0);
|
||||
page.setDefaultNavigationTimeout(1);
|
||||
await page.goto(server.PREFIX + '/empty.html').catch(e => error = e);
|
||||
expect(error.message).toContain('Navigation Timeout Exceeded: 1ms');
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should disable timeout when its set to 0', async({page, server}) => {
|
||||
let error = null;
|
||||
let loaded = false;
|
||||
|
||||
@@ -17,6 +17,7 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
const utils = require('./utils');
|
||||
const {waitEvent} = utils;
|
||||
const {TimeoutError} = utils.requireRoot('Errors');
|
||||
|
||||
const DeviceDescriptors = utils.requireRoot('DeviceDescriptors');
|
||||
const iPhone = DeviceDescriptors['iPhone 6'];
|
||||
@@ -421,6 +422,17 @@ module.exports.addTests = function({testRunner, expect, headless}) {
|
||||
]);
|
||||
expect(request.url()).toBe(server.PREFIX + '/digits/2.png');
|
||||
});
|
||||
it('should respect timeout', async({page, server}) => {
|
||||
let error = null;
|
||||
await page.waitForRequest(() => false, {timeout: 1}).catch(e => error = e);
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should respect default timeout', async({page, server}) => {
|
||||
let error = null;
|
||||
page.setDefaultTimeout(1);
|
||||
await page.waitForRequest(() => false).catch(e => error = e);
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should work with no timeout', async({page, server}) => {
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
const [request] = await Promise.all([
|
||||
@@ -448,6 +460,17 @@ module.exports.addTests = function({testRunner, expect, headless}) {
|
||||
]);
|
||||
expect(response.url()).toBe(server.PREFIX + '/digits/2.png');
|
||||
});
|
||||
it('should respect timeout', async({page, server}) => {
|
||||
let error = null;
|
||||
await page.waitForResponse(() => false, {timeout: 1}).catch(e => error = e);
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should respect default timeout', async({page, server}) => {
|
||||
let error = null;
|
||||
page.setDefaultTimeout(1);
|
||||
await page.waitForResponse(() => false).catch(e => error = e);
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should work with predicate', async({page, server}) => {
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
const [response] = await Promise.all([
|
||||
@@ -617,6 +640,23 @@ module.exports.addTests = function({testRunner, expect, headless}) {
|
||||
const result = await page.content();
|
||||
expect(result).toBe(`${doctype}${expectedOutput}`);
|
||||
});
|
||||
it('should respect timeout', async({page, server}) => {
|
||||
const imgPath = '/img.png';
|
||||
// stall for image
|
||||
server.setRoute(imgPath, (req, res) => {});
|
||||
let error = null;
|
||||
await page.setContent(`<img src="${server.PREFIX + imgPath}"></img>`, {timeout: 1}).catch(e => error = e);
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should respect default navigation timeout', async({page, server}) => {
|
||||
page.setDefaultNavigationTimeout(1);
|
||||
const imgPath = '/img.png';
|
||||
// stall for image
|
||||
server.setRoute(imgPath, (req, res) => {});
|
||||
let error = null;
|
||||
await page.setContent(`<img src="${server.PREFIX + imgPath}"></img>`).catch(e => error = e);
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should await resources to load', async({page, server}) => {
|
||||
const imgPath = '/img.png';
|
||||
let imgResponse = null;
|
||||
|
||||
@@ -170,6 +170,14 @@ module.exports.addTests = function({testRunner, expect, product}) {
|
||||
expect(error.message).toContain('waiting for function failed: timeout');
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should respect default timeout', async({page}) => {
|
||||
page.setDefaultTimeout(1);
|
||||
let error = null;
|
||||
await page.waitForFunction('false').catch(e => error = e);
|
||||
expect(error).toBeTruthy();
|
||||
expect(error.message).toContain('waiting for function failed: timeout');
|
||||
expect(error).toBeInstanceOf(TimeoutError);
|
||||
});
|
||||
it('should disable timeout when its set to 0', async({page}) => {
|
||||
const watchdog = page.waitForFunction(() => {
|
||||
window.__counter = (window.__counter || 0) + 1;
|
||||
|
||||
Reference in New Issue
Block a user