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' } })`.
:::
## context-option-defaulttimeout
- `defaultTimeout` <[float]>
Set the default browser context timeout for the new context. Equivalent to calling [`method: BrowserContext.setDefaultTimeout`].
## select-options-values
* langs: java, js, csharp
- `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-dir-%%
- %%-context-option-recordvideo-size-%%
- %%-context-option-defaulttimeout-%%
## browser-option-args
- `args` <[Array]<[string]>>

View file

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

View file

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

View file

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

View file

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

View file

@ -252,6 +252,7 @@ export type BrowserContextOptions = {
},
proxy?: ProxySettings,
_debugName?: string,
defaultTimeout?: number,
};
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();
});
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}) => {
const context = await browser.newContext({offline: true});
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";
/**
* 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`.
*/
@ -8096,6 +8102,12 @@ export interface AndroidDevice {
*/
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`.
*/
@ -8850,6 +8862,12 @@ export interface Browser extends EventEmitter {
*/
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`.
*/
@ -10919,6 +10937,12 @@ export interface BrowserContextOptions {
*/
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`.
*/