feat: add defaultTimeout browser context configuration option (#6944)

Fixes #6940

Co-authored-by: Amit Abershitz <aabershitz@proofpoint.com>
Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com>
This commit is contained in:
Amit Abershitz 2021-06-11 04:10:20 +03:00 committed by GitHub
parent 9b9091b3fe
commit 617dfdef9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 0 deletions

View file

@ -469,6 +469,11 @@ contexts override the proxy, global proxy will be never used and can be any stri
`launch({ proxy: { server: 'http://per-context' } })`. `launch({ proxy: { server: 'http://per-context' } })`.
::: :::
## context-option-defaulttimeout
- `defaultTimeout` <[float]>
Set the default browser context timeout for the new context. Equivalent to calling [`method: BrowserContext.setDefaultTimeout`].
## select-options-values ## select-options-values
* langs: java, js, csharp * langs: java, js, csharp
- `values` <[null]|[string]|[ElementHandle]|[Array]<[string]>|[Object]|[Array]<[ElementHandle]>|[Array]<[Object]>> - `values` <[null]|[string]|[ElementHandle]|[Array]<[string]>|[Object]|[Array]<[ElementHandle]>|[Array]<[Object]>>
@ -594,6 +599,7 @@ using the [`method: AndroidDevice.setDefaultTimeout`] method.
- %%-context-option-recordvideo-%% - %%-context-option-recordvideo-%%
- %%-context-option-recordvideo-dir-%% - %%-context-option-recordvideo-dir-%%
- %%-context-option-recordvideo-size-%% - %%-context-option-recordvideo-size-%%
- %%-context-option-defaulttimeout-%%
## browser-option-args ## browser-option-args
- `args` <[Array]<[string]>> - `args` <[Array]<[string]>>

View file

@ -339,6 +339,7 @@ export type BrowserTypeLaunchPersistentContextParams = {
omitContent?: boolean, omitContent?: boolean,
path: string, path: string,
}, },
defaultTimeout?: number,
userDataDir: string, userDataDir: string,
slowMo?: number, slowMo?: number,
}; };
@ -409,6 +410,7 @@ export type BrowserTypeLaunchPersistentContextOptions = {
omitContent?: boolean, omitContent?: boolean,
path: string, path: string,
}, },
defaultTimeout?: number,
slowMo?: number, slowMo?: number,
}; };
export type BrowserTypeLaunchPersistentContextResult = { export type BrowserTypeLaunchPersistentContextResult = {
@ -499,6 +501,7 @@ export type BrowserNewContextParams = {
omitContent?: boolean, omitContent?: boolean,
path: string, path: string,
}, },
defaultTimeout?: number,
proxy?: { proxy?: {
server: string, server: string,
bypass?: string, bypass?: string,
@ -556,6 +559,7 @@ export type BrowserNewContextOptions = {
omitContent?: boolean, omitContent?: boolean,
path: string, path: string,
}, },
defaultTimeout?: number,
proxy?: { proxy?: {
server: string, server: string,
bypass?: string, bypass?: string,

View file

@ -322,6 +322,7 @@ ContextOptions:
properties: properties:
omitContent: boolean? omitContent: boolean?
path: string path: string
defaultTimeout: number?
Playwright: Playwright:

View file

@ -248,6 +248,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme {
omitContent: tOptional(tBoolean), omitContent: tOptional(tBoolean),
path: tString, path: tString,
})), })),
defaultTimeout: tOptional(tNumber),
userDataDir: tString, userDataDir: tString,
slowMo: tOptional(tNumber), slowMo: tOptional(tNumber),
}); });
@ -307,6 +308,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme {
omitContent: tOptional(tBoolean), omitContent: tOptional(tBoolean),
path: tString, path: tString,
})), })),
defaultTimeout: tOptional(tNumber),
proxy: tOptional(tObject({ proxy: tOptional(tObject({
server: tString, server: tString,
bypass: tOptional(tString), bypass: tOptional(tString),

View file

@ -76,6 +76,9 @@ export abstract class BrowserContext extends SdkObject {
if (this._options.recordHar) if (this._options.recordHar)
this._harTracer = new HarTracer(this, this._options.recordHar); this._harTracer = new HarTracer(this, this._options.recordHar);
this.tracing = new Tracing(this); this.tracing = new Tracing(this);
if (typeof this._options.defaultTimeout === 'number' && !debugMode())
this._timeoutSettings.setDefaultTimeout(this._options.defaultTimeout);
} }
_setSelectors(selectors: Selectors) { _setSelectors(selectors: Selectors) {

View file

@ -252,6 +252,7 @@ export type BrowserContextOptions = {
}, },
proxy?: ProxySettings, proxy?: ProxySettings,
_debugName?: string, _debugName?: string,
defaultTimeout?: number,
}; };
export type EnvArray = { name: string, value: string }[]; export type EnvArray = { name: string, value: string }[];

View file

@ -218,6 +218,16 @@ it('should be able to navigate after disabling javascript', async ({browser, ser
await context.close(); await context.close();
}); });
it('should respect default timeout when configured', async ({browser, playwright}) => {
const context = await browser.newContext({ defaultTimeout: 5 });
const page = await context.newPage();
let error = null;
await page.waitForFunction('false').catch(e => error = e);
expect(error).toBeInstanceOf(playwright.errors.TimeoutError);
expect(error.message).toContain('page.waitForFunction: Timeout 5ms exceeded');
await context.close();
});
it('should work with offline option', async ({browser, server}) => { it('should work with offline option', async ({browser, server}) => {
const context = await browser.newContext({offline: true}); const context = await browser.newContext({offline: true});
const page = await context.newPage(); const page = await context.newPage();

24
types/types.d.ts vendored
View file

@ -6985,6 +6985,12 @@ export interface BrowserType<Unused = {}> {
*/ */
colorScheme?: "light"|"dark"|"no-preference"; colorScheme?: "light"|"dark"|"no-preference";
/**
* Set the default browser context timeout for the new context. Equivalent to calling
* [browserContext.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-browsercontext#browsercontextsetdefaulttimeouttimeout).
*/
defaultTimeout?: number;
/** /**
* Specify device scale factor (can be thought of as dpr). Defaults to `1`. * Specify device scale factor (can be thought of as dpr). Defaults to `1`.
*/ */
@ -8096,6 +8102,12 @@ export interface AndroidDevice {
*/ */
command?: string; command?: string;
/**
* Set the default browser context timeout for the new context. Equivalent to calling
* [browserContext.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-browsercontext#browsercontextsetdefaulttimeouttimeout).
*/
defaultTimeout?: number;
/** /**
* Specify device scale factor (can be thought of as dpr). Defaults to `1`. * Specify device scale factor (can be thought of as dpr). Defaults to `1`.
*/ */
@ -8850,6 +8862,12 @@ export interface Browser extends EventEmitter {
*/ */
colorScheme?: "light"|"dark"|"no-preference"; colorScheme?: "light"|"dark"|"no-preference";
/**
* Set the default browser context timeout for the new context. Equivalent to calling
* [browserContext.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-browsercontext#browsercontextsetdefaulttimeouttimeout).
*/
defaultTimeout?: number;
/** /**
* Specify device scale factor (can be thought of as dpr). Defaults to `1`. * Specify device scale factor (can be thought of as dpr). Defaults to `1`.
*/ */
@ -10919,6 +10937,12 @@ export interface BrowserContextOptions {
*/ */
colorScheme?: "light"|"dark"|"no-preference"; colorScheme?: "light"|"dark"|"no-preference";
/**
* Set the default browser context timeout for the new context. Equivalent to calling
* [browserContext.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-browsercontext#browsercontextsetdefaulttimeouttimeout).
*/
defaultTimeout?: number;
/** /**
* Specify device scale factor (can be thought of as dpr). Defaults to `1`. * Specify device scale factor (can be thought of as dpr). Defaults to `1`.
*/ */