chore: allow not overriding media when creating context (#18413)
This commit is contained in:
parent
fabe42dc28
commit
a7f5f2d7a1
|
|
@ -523,22 +523,42 @@ Whether to emulate network being offline. Defaults to `false`.
|
||||||
Credentials for [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication).
|
Credentials for [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication).
|
||||||
|
|
||||||
## context-option-colorscheme
|
## context-option-colorscheme
|
||||||
- `colorScheme` <[ColorScheme]<"light"|"dark"|"no-preference">>
|
* langs: js, python, java
|
||||||
|
- `colorScheme` <null|[ColorScheme]<"light"|"dark"|"no-preference">>
|
||||||
|
|
||||||
Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
[`method: Page.emulateMedia`] for more details. Defaults to `'light'`.
|
[`method: Page.emulateMedia`] for more details. Passing `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
|
|
||||||
|
## context-option-colorscheme-csharp
|
||||||
|
* langs: csharp
|
||||||
|
- `colorScheme` <[ColorScheme]<"light"|"dark"|"no-preference"|"null">>
|
||||||
|
|
||||||
|
Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
|
[`method: Page.emulateMedia`] for more details. Passing `'null'` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
|
|
||||||
## context-option-reducedMotion
|
## context-option-reducedMotion
|
||||||
- `reducedMotion` <[ReducedMotion]<"reduce"|"no-preference">>
|
* langs: js, python, java
|
||||||
|
- `reducedMotion` <null|[ReducedMotion]<"reduce"|"no-preference">>
|
||||||
|
|
||||||
Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See [`method: Page.emulateMedia`] for more details. Defaults
|
Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See [`method: Page.emulateMedia`] for more details. Passing `null` resets emulation to system defaults. Defaults to `'no-preference'`.
|
||||||
to `'no-preference'`.
|
|
||||||
|
## context-option-reducedMotion-csharp
|
||||||
|
* langs: csharp
|
||||||
|
- `reducedMotion` <[ReducedMotion]<"reduce"|"no-preference"|"null">>
|
||||||
|
|
||||||
|
Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See [`method: Page.emulateMedia`] for more details. Passing `'null'` resets emulation to system defaults. Defaults to `'no-preference'`.
|
||||||
|
|
||||||
## context-option-forcedColors
|
## context-option-forcedColors
|
||||||
- `forcedColors` <[ForcedColors]<"active"|"none">>
|
* langs: js, python, java
|
||||||
|
- `forcedColors` <null|[ForcedColors]<"active"|"none">>
|
||||||
|
|
||||||
Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See [`method: Page.emulateMedia`] for more details. Defaults
|
Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See [`method: Page.emulateMedia`] for more details. Passing `null` resets emulation to system defaults. Defaults to `'none'`.
|
||||||
to `'none'`.
|
|
||||||
|
## context-option-forcedColors-csharp
|
||||||
|
* langs: csharp
|
||||||
|
- `forcedColors` <[ForcedColors]<"active"|"none"|"null">>
|
||||||
|
|
||||||
|
Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See [`method: Page.emulateMedia`] for more details. Passing `'null'` resets emulation to system defaults. Defaults to `'none'`.
|
||||||
|
|
||||||
## context-option-logger
|
## context-option-logger
|
||||||
* langs: js
|
* langs: js
|
||||||
|
|
@ -817,8 +837,11 @@ An acceptable perceived color difference in the [YIQ color space](https://en.wik
|
||||||
- %%-context-option-offline-%%
|
- %%-context-option-offline-%%
|
||||||
- %%-context-option-httpcredentials-%%
|
- %%-context-option-httpcredentials-%%
|
||||||
- %%-context-option-colorscheme-%%
|
- %%-context-option-colorscheme-%%
|
||||||
|
- %%-context-option-colorscheme-csharp-%%
|
||||||
- %%-context-option-reducedMotion-%%
|
- %%-context-option-reducedMotion-%%
|
||||||
|
- %%-context-option-reducedMotion-csharp-%%
|
||||||
- %%-context-option-forcedColors-%%
|
- %%-context-option-forcedColors-%%
|
||||||
|
- %%-context-option-forcedColors-csharp-%%
|
||||||
- %%-context-option-logger-%%
|
- %%-context-option-logger-%%
|
||||||
- %%-context-option-videospath-%%
|
- %%-context-option-videospath-%%
|
||||||
- %%-context-option-videosize-%%
|
- %%-context-option-videosize-%%
|
||||||
|
|
|
||||||
|
|
@ -416,6 +416,9 @@ export async function prepareBrowserContextParams(options: BrowserContextOptions
|
||||||
storageState: await prepareStorageState(options),
|
storageState: await prepareStorageState(options),
|
||||||
serviceWorkers: options.serviceWorkers,
|
serviceWorkers: options.serviceWorkers,
|
||||||
recordHar: prepareRecordHarOptions(options.recordHar),
|
recordHar: prepareRecordHarOptions(options.recordHar),
|
||||||
|
colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,
|
||||||
|
reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,
|
||||||
|
forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,
|
||||||
};
|
};
|
||||||
if (!contextParams.recordVideo && options.videosPath) {
|
if (!contextParams.recordVideo && options.videosPath) {
|
||||||
contextParams.recordVideo = {
|
contextParams.recordVideo = {
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,11 @@ import type { Page } from './page';
|
||||||
import type { Env, WaitForEventOptions, Headers, BrowserContextOptions } from './types';
|
import type { Env, WaitForEventOptions, Headers, BrowserContextOptions } from './types';
|
||||||
import { Waiter } from './waiter';
|
import { Waiter } from './waiter';
|
||||||
|
|
||||||
type ElectronOptions = Omit<channels.ElectronLaunchOptions, 'env'|'extraHTTPHeaders'|'recordHar'> & {
|
type ElectronOptions = Omit<channels.ElectronLaunchOptions, 'env'|'extraHTTPHeaders'|'recordHar'|'colorScheme'> & {
|
||||||
env?: Env,
|
env?: Env,
|
||||||
extraHTTPHeaders?: Headers,
|
extraHTTPHeaders?: Headers,
|
||||||
recordHar?: BrowserContextOptions['recordHar'],
|
recordHar?: BrowserContextOptions['recordHar'],
|
||||||
|
colorScheme?: 'dark' | 'light' | 'no-preference' | null,
|
||||||
};
|
};
|
||||||
|
|
||||||
type ElectronAppType = typeof import('electron');
|
type ElectronAppType = typeof import('electron');
|
||||||
|
|
|
||||||
|
|
@ -424,10 +424,10 @@ export class Page extends ChannelOwner<channels.PageChannel> implements api.Page
|
||||||
|
|
||||||
async emulateMedia(options: { media?: 'screen' | 'print' | null, colorScheme?: 'dark' | 'light' | 'no-preference' | null, reducedMotion?: 'reduce' | 'no-preference' | null, forcedColors?: 'active' | 'none' | null } = {}) {
|
async emulateMedia(options: { media?: 'screen' | 'print' | null, colorScheme?: 'dark' | 'light' | 'no-preference' | null, reducedMotion?: 'reduce' | 'no-preference' | null, forcedColors?: 'active' | 'none' | null } = {}) {
|
||||||
await this._channel.emulateMedia({
|
await this._channel.emulateMedia({
|
||||||
media: options.media === null ? 'null' : options.media,
|
media: options.media === null ? 'no-override' : options.media,
|
||||||
colorScheme: options.colorScheme === null ? 'null' : options.colorScheme,
|
colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,
|
||||||
reducedMotion: options.reducedMotion === null ? 'null' : options.reducedMotion,
|
reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,
|
||||||
forcedColors: options.forcedColors === null ? 'null' : options.forcedColors,
|
forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,32 +47,36 @@ export type SetStorageState = {
|
||||||
export type LifecycleEvent = channels.LifecycleEvent;
|
export type LifecycleEvent = channels.LifecycleEvent;
|
||||||
export const kLifecycleEvents: Set<LifecycleEvent> = new Set(['load', 'domcontentloaded', 'networkidle', 'commit']);
|
export const kLifecycleEvents: Set<LifecycleEvent> = new Set(['load', 'domcontentloaded', 'networkidle', 'commit']);
|
||||||
|
|
||||||
export type BrowserContextOptions = Omit<channels.BrowserNewContextOptions, 'viewport' | 'noDefaultViewport' | 'extraHTTPHeaders' | 'storageState' | 'recordHar'> & {
|
export type BrowserContextOptions = Omit<channels.BrowserNewContextOptions, 'viewport' | 'noDefaultViewport' | 'extraHTTPHeaders' | 'storageState' | 'recordHar' | 'colorScheme' | 'reducedMotion' | 'forcedColors'> & {
|
||||||
viewport?: Size | null,
|
viewport?: Size | null;
|
||||||
extraHTTPHeaders?: Headers,
|
extraHTTPHeaders?: Headers;
|
||||||
logger?: Logger,
|
logger?: Logger;
|
||||||
videosPath?: string,
|
videosPath?: string;
|
||||||
videoSize?: Size,
|
videoSize?: Size;
|
||||||
storageState?: string | SetStorageState,
|
storageState?: string | SetStorageState;
|
||||||
har?: {
|
har?: {
|
||||||
path: string;
|
path: string;
|
||||||
fallback?: 'abort'|'continue';
|
fallback?: 'abort'|'continue';
|
||||||
urlFilter?: string|RegExp;
|
urlFilter?: string|RegExp;
|
||||||
},
|
};
|
||||||
recordHar?: {
|
recordHar?: {
|
||||||
path: string,
|
path: string,
|
||||||
omitContent?: boolean,
|
omitContent?: boolean,
|
||||||
content?: 'omit' | 'embed' | 'attach',
|
content?: 'omit' | 'embed' | 'attach',
|
||||||
mode?: 'full' | 'minimal',
|
mode?: 'full' | 'minimal',
|
||||||
urlFilter?: string | RegExp,
|
urlFilter?: string | RegExp,
|
||||||
},
|
};
|
||||||
|
colorScheme?: 'dark' | 'light' | 'no-preference' | null;
|
||||||
|
reducedMotion?: 'reduce' | 'no-preference' | null;
|
||||||
|
forcedColors?: 'active' | 'none' | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
type LaunchOverrides = {
|
type LaunchOverrides = {
|
||||||
ignoreDefaultArgs?: boolean | string[],
|
ignoreDefaultArgs?: boolean | string[];
|
||||||
env?: Env,
|
env?: Env;
|
||||||
logger?: Logger,
|
logger?: Logger;
|
||||||
};
|
};
|
||||||
|
|
||||||
type FirefoxUserPrefs = {
|
type FirefoxUserPrefs = {
|
||||||
firefoxUserPrefs?: { [key: string]: string | number | boolean },
|
firefoxUserPrefs?: { [key: string]: string | number | boolean },
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -506,9 +506,9 @@ scheme.BrowserTypeLaunchPersistentContextParams = tObject({
|
||||||
deviceScaleFactor: tOptional(tNumber),
|
deviceScaleFactor: tOptional(tNumber),
|
||||||
isMobile: tOptional(tBoolean),
|
isMobile: tOptional(tBoolean),
|
||||||
hasTouch: tOptional(tBoolean),
|
hasTouch: tOptional(tBoolean),
|
||||||
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference'])),
|
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),
|
||||||
reducedMotion: tOptional(tEnum(['reduce', 'no-preference'])),
|
reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),
|
||||||
forcedColors: tOptional(tEnum(['active', 'none'])),
|
forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),
|
||||||
acceptDownloads: tOptional(tBoolean),
|
acceptDownloads: tOptional(tBoolean),
|
||||||
baseURL: tOptional(tString),
|
baseURL: tOptional(tString),
|
||||||
recordVideo: tOptional(tObject({
|
recordVideo: tOptional(tObject({
|
||||||
|
|
@ -577,9 +577,9 @@ scheme.BrowserNewContextParams = tObject({
|
||||||
deviceScaleFactor: tOptional(tNumber),
|
deviceScaleFactor: tOptional(tNumber),
|
||||||
isMobile: tOptional(tBoolean),
|
isMobile: tOptional(tBoolean),
|
||||||
hasTouch: tOptional(tBoolean),
|
hasTouch: tOptional(tBoolean),
|
||||||
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference'])),
|
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),
|
||||||
reducedMotion: tOptional(tEnum(['reduce', 'no-preference'])),
|
reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),
|
||||||
forcedColors: tOptional(tEnum(['active', 'none'])),
|
forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),
|
||||||
acceptDownloads: tOptional(tBoolean),
|
acceptDownloads: tOptional(tBoolean),
|
||||||
baseURL: tOptional(tString),
|
baseURL: tOptional(tString),
|
||||||
recordVideo: tOptional(tObject({
|
recordVideo: tOptional(tObject({
|
||||||
|
|
@ -637,9 +637,9 @@ scheme.BrowserNewContextForReuseParams = tObject({
|
||||||
deviceScaleFactor: tOptional(tNumber),
|
deviceScaleFactor: tOptional(tNumber),
|
||||||
isMobile: tOptional(tBoolean),
|
isMobile: tOptional(tBoolean),
|
||||||
hasTouch: tOptional(tBoolean),
|
hasTouch: tOptional(tBoolean),
|
||||||
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference'])),
|
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),
|
||||||
reducedMotion: tOptional(tEnum(['reduce', 'no-preference'])),
|
reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),
|
||||||
forcedColors: tOptional(tEnum(['active', 'none'])),
|
forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),
|
||||||
acceptDownloads: tOptional(tBoolean),
|
acceptDownloads: tOptional(tBoolean),
|
||||||
baseURL: tOptional(tString),
|
baseURL: tOptional(tString),
|
||||||
recordVideo: tOptional(tObject({
|
recordVideo: tOptional(tObject({
|
||||||
|
|
@ -932,10 +932,10 @@ scheme.PageCloseParams = tObject({
|
||||||
});
|
});
|
||||||
scheme.PageCloseResult = tOptional(tObject({}));
|
scheme.PageCloseResult = tOptional(tObject({}));
|
||||||
scheme.PageEmulateMediaParams = tObject({
|
scheme.PageEmulateMediaParams = tObject({
|
||||||
media: tOptional(tEnum(['screen', 'print', 'null'])),
|
media: tOptional(tEnum(['screen', 'print', 'no-override'])),
|
||||||
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'null'])),
|
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),
|
||||||
reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'null'])),
|
reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),
|
||||||
forcedColors: tOptional(tEnum(['active', 'none', 'null'])),
|
forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),
|
||||||
});
|
});
|
||||||
scheme.PageEmulateMediaResult = tOptional(tObject({}));
|
scheme.PageEmulateMediaResult = tOptional(tObject({}));
|
||||||
scheme.PageExposeBindingParams = tObject({
|
scheme.PageExposeBindingParams = tObject({
|
||||||
|
|
@ -2125,7 +2125,7 @@ scheme.ElectronLaunchParams = tObject({
|
||||||
timeout: tOptional(tNumber),
|
timeout: tOptional(tNumber),
|
||||||
acceptDownloads: tOptional(tBoolean),
|
acceptDownloads: tOptional(tBoolean),
|
||||||
bypassCSP: tOptional(tBoolean),
|
bypassCSP: tOptional(tBoolean),
|
||||||
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference'])),
|
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),
|
||||||
extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),
|
extraHTTPHeaders: tOptional(tArray(tType('NameValue'))),
|
||||||
geolocation: tOptional(tObject({
|
geolocation: tOptional(tObject({
|
||||||
longitude: tNumber,
|
longitude: tNumber,
|
||||||
|
|
@ -2347,9 +2347,9 @@ scheme.AndroidDeviceLaunchBrowserParams = tObject({
|
||||||
deviceScaleFactor: tOptional(tNumber),
|
deviceScaleFactor: tOptional(tNumber),
|
||||||
isMobile: tOptional(tBoolean),
|
isMobile: tOptional(tBoolean),
|
||||||
hasTouch: tOptional(tBoolean),
|
hasTouch: tOptional(tBoolean),
|
||||||
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference'])),
|
colorScheme: tOptional(tEnum(['dark', 'light', 'no-preference', 'no-override'])),
|
||||||
reducedMotion: tOptional(tEnum(['reduce', 'no-preference'])),
|
reducedMotion: tOptional(tEnum(['reduce', 'no-preference', 'no-override'])),
|
||||||
forcedColors: tOptional(tEnum(['active', 'none'])),
|
forcedColors: tOptional(tEnum(['active', 'none', 'no-override'])),
|
||||||
acceptDownloads: tOptional(tBoolean),
|
acceptDownloads: tOptional(tBoolean),
|
||||||
baseURL: tOptional(tString),
|
baseURL: tOptional(tString),
|
||||||
recordVideo: tOptional(tObject({
|
recordVideo: tOptional(tObject({
|
||||||
|
|
|
||||||
|
|
@ -1064,16 +1064,17 @@ class FrameSession {
|
||||||
|
|
||||||
async _updateEmulateMedia(): Promise<void> {
|
async _updateEmulateMedia(): Promise<void> {
|
||||||
const emulatedMedia = this._page.emulatedMedia();
|
const emulatedMedia = this._page.emulatedMedia();
|
||||||
const colorScheme = emulatedMedia.colorScheme === null ? '' : emulatedMedia.colorScheme;
|
// Empty string disables the override.
|
||||||
const reducedMotion = emulatedMedia.reducedMotion === null ? '' : emulatedMedia.reducedMotion;
|
const media = emulatedMedia.media === 'no-override' ? '' : emulatedMedia.media;
|
||||||
const forcedColors = emulatedMedia.forcedColors === null ? '' : emulatedMedia.forcedColors;
|
const colorScheme = emulatedMedia.colorScheme === 'no-override' ? '' : emulatedMedia.colorScheme;
|
||||||
|
const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? '' : emulatedMedia.reducedMotion;
|
||||||
|
const forcedColors = emulatedMedia.forcedColors === 'no-override' ? '' : emulatedMedia.forcedColors;
|
||||||
const features = [
|
const features = [
|
||||||
{ name: 'prefers-color-scheme', value: colorScheme },
|
{ name: 'prefers-color-scheme', value: colorScheme },
|
||||||
{ name: 'prefers-reduced-motion', value: reducedMotion },
|
{ name: 'prefers-reduced-motion', value: reducedMotion },
|
||||||
{ name: 'forced-colors', value: forcedColors },
|
{ name: 'forced-colors', value: forcedColors },
|
||||||
];
|
];
|
||||||
// Empty string disables the override.
|
await this._client.send('Emulation.setEmulatedMedia', { media, features });
|
||||||
await this._client.send('Emulation.setEmulatedMedia', { media: emulatedMedia.media || '', features });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async _updateUserAgent(): Promise<void> {
|
async _updateUserAgent(): Promise<void> {
|
||||||
|
|
|
||||||
|
|
@ -138,10 +138,10 @@ export class PageDispatcher extends Dispatcher<Page, channels.PageChannel, Brows
|
||||||
|
|
||||||
async emulateMedia(params: channels.PageEmulateMediaParams, metadata: CallMetadata): Promise<void> {
|
async emulateMedia(params: channels.PageEmulateMediaParams, metadata: CallMetadata): Promise<void> {
|
||||||
await this._page.emulateMedia({
|
await this._page.emulateMedia({
|
||||||
media: params.media === 'null' ? null : params.media,
|
media: params.media,
|
||||||
colorScheme: params.colorScheme === 'null' ? null : params.colorScheme,
|
colorScheme: params.colorScheme,
|
||||||
reducedMotion: params.reducedMotion === 'null' ? null : params.reducedMotion,
|
reducedMotion: params.reducedMotion,
|
||||||
forcedColors: params.forcedColors === 'null' ? null : params.forcedColors,
|
forcedColors: params.forcedColors,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -204,18 +204,24 @@ export class FFBrowserContext extends BrowserContext {
|
||||||
promises.push(this.setGeolocation(this._options.geolocation));
|
promises.push(this.setGeolocation(this._options.geolocation));
|
||||||
if (this._options.offline)
|
if (this._options.offline)
|
||||||
promises.push(this.setOffline(this._options.offline));
|
promises.push(this.setOffline(this._options.offline));
|
||||||
promises.push(this._browser._connection.send('Browser.setColorScheme', {
|
if (this._options.colorScheme !== 'no-override') {
|
||||||
browserContextId,
|
promises.push(this._browser._connection.send('Browser.setColorScheme', {
|
||||||
colorScheme: this._options.colorScheme !== undefined ? this._options.colorScheme : 'light',
|
browserContextId,
|
||||||
}));
|
colorScheme: this._options.colorScheme !== undefined ? this._options.colorScheme : 'light',
|
||||||
promises.push(this._browser._connection.send('Browser.setReducedMotion', {
|
}));
|
||||||
browserContextId,
|
}
|
||||||
reducedMotion: this._options.reducedMotion !== undefined ? this._options.reducedMotion : 'no-preference',
|
if (this._options.reducedMotion !== 'no-override') {
|
||||||
}));
|
promises.push(this._browser._connection.send('Browser.setReducedMotion', {
|
||||||
promises.push(this._browser._connection.send('Browser.setForcedColors', {
|
browserContextId,
|
||||||
browserContextId,
|
reducedMotion: this._options.reducedMotion !== undefined ? this._options.reducedMotion : 'no-preference',
|
||||||
forcedColors: this._options.forcedColors !== undefined ? this._options.forcedColors : 'none',
|
}));
|
||||||
}));
|
}
|
||||||
|
if (this._options.forcedColors !== 'no-override') {
|
||||||
|
promises.push(this._browser._connection.send('Browser.setForcedColors', {
|
||||||
|
browserContextId,
|
||||||
|
forcedColors: this._options.forcedColors !== undefined ? this._options.forcedColors : 'none',
|
||||||
|
}));
|
||||||
|
}
|
||||||
if (this._options.recordVideo) {
|
if (this._options.recordVideo) {
|
||||||
promises.push(this._ensureVideosPath().then(() => {
|
promises.push(this._ensureVideosPath().then(() => {
|
||||||
return this._browser._connection.send('Browser.setVideoRecordingOptions', {
|
return this._browser._connection.send('Browser.setVideoRecordingOptions', {
|
||||||
|
|
|
||||||
|
|
@ -371,12 +371,12 @@ export class FFPage implements PageDelegate {
|
||||||
|
|
||||||
async updateEmulateMedia(): Promise<void> {
|
async updateEmulateMedia(): Promise<void> {
|
||||||
const emulatedMedia = this._page.emulatedMedia();
|
const emulatedMedia = this._page.emulatedMedia();
|
||||||
const colorScheme = emulatedMedia.colorScheme ?? undefined;
|
const colorScheme = emulatedMedia.colorScheme === 'no-override' ? undefined : emulatedMedia.colorScheme;
|
||||||
const reducedMotion = emulatedMedia.reducedMotion ?? undefined;
|
const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? undefined : emulatedMedia.reducedMotion;
|
||||||
const forcedColors = emulatedMedia.forcedColors ?? undefined;
|
const forcedColors = emulatedMedia.forcedColors === 'no-override' ? undefined : emulatedMedia.forcedColors;
|
||||||
await this._session.send('Page.setEmulatedMedia', {
|
await this._session.send('Page.setEmulatedMedia', {
|
||||||
// Empty string means reset.
|
// Empty string means reset.
|
||||||
type: emulatedMedia.media === null ? '' : emulatedMedia.media,
|
type: emulatedMedia.media === 'no-override' ? '' : emulatedMedia.media,
|
||||||
colorScheme,
|
colorScheme,
|
||||||
reducedMotion,
|
reducedMotion,
|
||||||
forcedColors,
|
forcedColors,
|
||||||
|
|
|
||||||
|
|
@ -101,10 +101,10 @@ export interface PageDelegate {
|
||||||
type EmulatedSize = { screen: types.Size, viewport: types.Size };
|
type EmulatedSize = { screen: types.Size, viewport: types.Size };
|
||||||
|
|
||||||
type EmulatedMedia = {
|
type EmulatedMedia = {
|
||||||
media: types.MediaType | null;
|
media: types.MediaType;
|
||||||
colorScheme: types.ColorScheme | null;
|
colorScheme: types.ColorScheme;
|
||||||
reducedMotion: types.ReducedMotion | null;
|
reducedMotion: types.ReducedMotion;
|
||||||
forcedColors: types.ForcedColors | null;
|
forcedColors: types.ForcedColors;
|
||||||
};
|
};
|
||||||
|
|
||||||
type ExpectScreenshotOptions = {
|
type ExpectScreenshotOptions = {
|
||||||
|
|
@ -442,7 +442,7 @@ export class Page extends SdkObject {
|
||||||
emulatedMedia(): EmulatedMedia {
|
emulatedMedia(): EmulatedMedia {
|
||||||
const contextOptions = this._browserContext._options;
|
const contextOptions = this._browserContext._options;
|
||||||
return {
|
return {
|
||||||
media: this._emulatedMedia.media || null,
|
media: this._emulatedMedia.media || 'no-override',
|
||||||
colorScheme: this._emulatedMedia.colorScheme !== undefined ? this._emulatedMedia.colorScheme : contextOptions.colorScheme ?? 'light',
|
colorScheme: this._emulatedMedia.colorScheme !== undefined ? this._emulatedMedia.colorScheme : contextOptions.colorScheme ?? 'light',
|
||||||
reducedMotion: this._emulatedMedia.reducedMotion !== undefined ? this._emulatedMedia.reducedMotion : contextOptions.reducedMotion ?? 'no-preference',
|
reducedMotion: this._emulatedMedia.reducedMotion !== undefined ? this._emulatedMedia.reducedMotion : contextOptions.reducedMotion ?? 'no-preference',
|
||||||
forcedColors: this._emulatedMedia.forcedColors !== undefined ? this._emulatedMedia.forcedColors : contextOptions.forcedColors ?? 'none',
|
forcedColors: this._emulatedMedia.forcedColors !== undefined ? this._emulatedMedia.forcedColors : contextOptions.forcedColors ?? 'none',
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,7 @@ export class RecorderApp extends EventEmitter implements IRecorderApp {
|
||||||
channel: findChromiumChannel(sdkLanguage),
|
channel: findChromiumChannel(sdkLanguage),
|
||||||
args,
|
args,
|
||||||
noDefaultViewport: true,
|
noDefaultViewport: true,
|
||||||
|
colorScheme: 'no-override',
|
||||||
ignoreDefaultArgs: ['--enable-automation'],
|
ignoreDefaultArgs: ['--enable-automation'],
|
||||||
headless: !!process.env.PWTEST_CLI_HEADLESS || (isUnderTest() && !headed),
|
headless: !!process.env.PWTEST_CLI_HEADLESS || (isUnderTest() && !headed),
|
||||||
useWebSocket: !!process.env.PWTEST_RECORDER_PORT,
|
useWebSocket: !!process.env.PWTEST_RECORDER_PORT,
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ export async function showTraceViewer(traceUrls: string[], browserName: string,
|
||||||
noDefaultViewport: true,
|
noDefaultViewport: true,
|
||||||
ignoreDefaultArgs: ['--enable-automation'],
|
ignoreDefaultArgs: ['--enable-automation'],
|
||||||
headless,
|
headless,
|
||||||
|
colorScheme: 'no-override',
|
||||||
useWebSocket: isUnderTest()
|
useWebSocket: isUnderTest()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,13 +77,13 @@ export type FilePayload = {
|
||||||
buffer: string,
|
buffer: string,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type MediaType = 'screen' | 'print';
|
export type MediaType = 'screen' | 'print' | 'no-override';
|
||||||
|
|
||||||
export type ColorScheme = 'dark' | 'light' | 'no-preference';
|
export type ColorScheme = 'dark' | 'light' | 'no-preference' | 'no-override';
|
||||||
|
|
||||||
export type ReducedMotion = 'no-preference' | 'reduce';
|
export type ReducedMotion = 'no-preference' | 'reduce' | 'no-override';
|
||||||
|
|
||||||
export type ForcedColors = 'active' | 'none';
|
export type ForcedColors = 'active' | 'none' | 'no-override';
|
||||||
|
|
||||||
export type DeviceDescriptor = {
|
export type DeviceDescriptor = {
|
||||||
userAgent: string,
|
userAgent: string,
|
||||||
|
|
|
||||||
|
|
@ -627,25 +627,28 @@ export class WKPage implements PageDelegate {
|
||||||
await this._page._onFileChooserOpened(handle);
|
await this._page._onFileChooserOpened(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async _setEmulateMedia(session: WKSession, mediaType: types.MediaType | null, colorScheme: types.ColorScheme | null, reducedMotion: types.ReducedMotion | null, forcedColors: types.ForcedColors | null): Promise<void> {
|
private static async _setEmulateMedia(session: WKSession, mediaType: types.MediaType, colorScheme: types.ColorScheme, reducedMotion: types.ReducedMotion, forcedColors: types.ForcedColors): Promise<void> {
|
||||||
const promises = [];
|
const promises = [];
|
||||||
promises.push(session.send('Page.setEmulatedMedia', { media: mediaType || '' }));
|
promises.push(session.send('Page.setEmulatedMedia', { media: mediaType === 'no-override' ? '' : mediaType }));
|
||||||
let appearance: any = undefined;
|
let appearance: any = undefined;
|
||||||
switch (colorScheme) {
|
switch (colorScheme) {
|
||||||
case 'light': appearance = 'Light'; break;
|
case 'light': appearance = 'Light'; break;
|
||||||
case 'dark': appearance = 'Dark'; break;
|
case 'dark': appearance = 'Dark'; break;
|
||||||
|
case 'no-override': appearance = undefined; break;
|
||||||
}
|
}
|
||||||
promises.push(session.send('Page.setForcedAppearance', { appearance }));
|
promises.push(session.send('Page.setForcedAppearance', { appearance }));
|
||||||
let reducedMotionWk: any = undefined;
|
let reducedMotionWk: any = undefined;
|
||||||
switch (reducedMotion) {
|
switch (reducedMotion) {
|
||||||
case 'reduce': reducedMotionWk = 'Reduce'; break;
|
case 'reduce': reducedMotionWk = 'Reduce'; break;
|
||||||
case 'no-preference': reducedMotionWk = 'NoPreference'; break;
|
case 'no-preference': reducedMotionWk = 'NoPreference'; break;
|
||||||
|
case 'no-override': reducedMotionWk = undefined; break;
|
||||||
}
|
}
|
||||||
promises.push(session.send('Page.setForcedReducedMotion', { reducedMotion: reducedMotionWk }));
|
promises.push(session.send('Page.setForcedReducedMotion', { reducedMotion: reducedMotionWk }));
|
||||||
let forcedColorsWk: any = undefined;
|
let forcedColorsWk: any = undefined;
|
||||||
switch (forcedColors) {
|
switch (forcedColors) {
|
||||||
case 'active': forcedColorsWk = 'Active'; break;
|
case 'active': forcedColorsWk = 'Active'; break;
|
||||||
case 'none': forcedColorsWk = 'None'; break;
|
case 'none': forcedColorsWk = 'None'; break;
|
||||||
|
case 'no-override': forcedColorsWk = undefined; break;
|
||||||
}
|
}
|
||||||
promises.push(session.send('Page.setForcedColors', { forcedColors: forcedColorsWk }));
|
promises.push(session.send('Page.setForcedColors', { forcedColors: forcedColorsWk }));
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|
|
||||||
78
packages/playwright-core/types/types.d.ts
vendored
78
packages/playwright-core/types/types.d.ts
vendored
|
|
@ -11337,10 +11337,10 @@ export interface BrowserType<Unused = {}> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'light'`.
|
* `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
*/
|
*/
|
||||||
colorScheme?: "light"|"dark"|"no-preference";
|
colorScheme?: null|"light"|"dark"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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`.
|
||||||
|
|
@ -11379,10 +11379,10 @@ export interface BrowserType<Unused = {}> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'none'`.
|
* `null` resets emulation to system defaults. Defaults to `'none'`.
|
||||||
*/
|
*/
|
||||||
forcedColors?: "active"|"none";
|
forcedColors?: null|"active"|"none";
|
||||||
|
|
||||||
geolocation?: {
|
geolocation?: {
|
||||||
/**
|
/**
|
||||||
|
|
@ -11581,10 +11581,10 @@ export interface BrowserType<Unused = {}> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'no-preference'`.
|
* `null` resets emulation to system defaults. Defaults to `'no-preference'`.
|
||||||
*/
|
*/
|
||||||
reducedMotion?: "reduce"|"no-preference";
|
reducedMotion?: null|"reduce"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
||||||
|
|
@ -12765,10 +12765,10 @@ export interface AndroidDevice {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'light'`.
|
* `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
*/
|
*/
|
||||||
colorScheme?: "light"|"dark"|"no-preference";
|
colorScheme?: null|"light"|"dark"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Optional package name to launch instead of default Chrome for Android.
|
* Optional package name to launch instead of default Chrome for Android.
|
||||||
|
|
@ -12787,10 +12787,10 @@ export interface AndroidDevice {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'none'`.
|
* `null` resets emulation to system defaults. Defaults to `'none'`.
|
||||||
*/
|
*/
|
||||||
forcedColors?: "active"|"none";
|
forcedColors?: null|"active"|"none";
|
||||||
|
|
||||||
geolocation?: {
|
geolocation?: {
|
||||||
/**
|
/**
|
||||||
|
|
@ -12934,10 +12934,10 @@ export interface AndroidDevice {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'no-preference'`.
|
* `null` resets emulation to system defaults. Defaults to `'no-preference'`.
|
||||||
*/
|
*/
|
||||||
reducedMotion?: "reduce"|"no-preference";
|
reducedMotion?: null|"reduce"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
||||||
|
|
@ -14552,10 +14552,10 @@ export interface Browser extends EventEmitter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'light'`.
|
* `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
*/
|
*/
|
||||||
colorScheme?: "light"|"dark"|"no-preference";
|
colorScheme?: null|"light"|"dark"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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`.
|
||||||
|
|
@ -14569,10 +14569,10 @@ export interface Browser extends EventEmitter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'none'`.
|
* `null` resets emulation to system defaults. Defaults to `'none'`.
|
||||||
*/
|
*/
|
||||||
forcedColors?: "active"|"none";
|
forcedColors?: null|"active"|"none";
|
||||||
|
|
||||||
geolocation?: {
|
geolocation?: {
|
||||||
/**
|
/**
|
||||||
|
|
@ -14746,10 +14746,10 @@ export interface Browser extends EventEmitter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'no-preference'`.
|
* `null` resets emulation to system defaults. Defaults to `'no-preference'`.
|
||||||
*/
|
*/
|
||||||
reducedMotion?: "reduce"|"no-preference";
|
reducedMotion?: null|"reduce"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
||||||
|
|
@ -15400,10 +15400,10 @@ export interface Electron {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'light'`.
|
* `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
*/
|
*/
|
||||||
colorScheme?: "light"|"dark"|"no-preference";
|
colorScheme?: null|"light"|"dark"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current working directory to launch application from.
|
* Current working directory to launch application from.
|
||||||
|
|
@ -17421,10 +17421,10 @@ export interface BrowserContextOptions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'light'`.
|
* `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
*/
|
*/
|
||||||
colorScheme?: "light"|"dark"|"no-preference";
|
colorScheme?: null|"light"|"dark"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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`.
|
||||||
|
|
@ -17438,10 +17438,10 @@ export interface BrowserContextOptions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'none'`.
|
* `null` resets emulation to system defaults. Defaults to `'none'`.
|
||||||
*/
|
*/
|
||||||
forcedColors?: "active"|"none";
|
forcedColors?: null|"active"|"none";
|
||||||
|
|
||||||
geolocation?: Geolocation;
|
geolocation?: Geolocation;
|
||||||
|
|
||||||
|
|
@ -17596,10 +17596,10 @@ export interface BrowserContextOptions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
* Emulates `'prefers-reduced-motion'` media feature, supported values are `'reduce'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'no-preference'`.
|
* `null` resets emulation to system defaults. Defaults to `'no-preference'`.
|
||||||
*/
|
*/
|
||||||
reducedMotion?: "reduce"|"no-preference";
|
reducedMotion?: null|"reduce"|"no-preference";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
* Emulates consistent window screen size available inside web page via `window.screen`. Is only used when the `viewport`
|
||||||
|
|
|
||||||
4
packages/playwright-test/types/test.d.ts
vendored
4
packages/playwright-test/types/test.d.ts
vendored
|
|
@ -2857,8 +2857,8 @@ export interface PlaywrightTestOptions {
|
||||||
bypassCSP: boolean | undefined;
|
bypassCSP: boolean | undefined;
|
||||||
/**
|
/**
|
||||||
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
* Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Defaults
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details. Passing
|
||||||
* to `'light'`.
|
* `null` resets emulation to system defaults. Defaults to `'light'`.
|
||||||
*/
|
*/
|
||||||
colorScheme: ColorScheme | undefined;
|
colorScheme: ColorScheme | undefined;
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -892,9 +892,9 @@ export type BrowserTypeLaunchPersistentContextParams = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -962,9 +962,9 @@ export type BrowserTypeLaunchPersistentContextOptions = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -1057,9 +1057,9 @@ export type BrowserNewContextParams = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -1114,9 +1114,9 @@ export type BrowserNewContextOptions = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -1174,9 +1174,9 @@ export type BrowserNewContextForReuseParams = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -1231,9 +1231,9 @@ export type BrowserNewContextForReuseOptions = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -1740,16 +1740,16 @@ export type PageCloseOptions = {
|
||||||
};
|
};
|
||||||
export type PageCloseResult = void;
|
export type PageCloseResult = void;
|
||||||
export type PageEmulateMediaParams = {
|
export type PageEmulateMediaParams = {
|
||||||
media?: 'screen' | 'print' | 'null',
|
media?: 'screen' | 'print' | 'no-override',
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference' | 'null',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference' | 'null',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none' | 'null',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
};
|
};
|
||||||
export type PageEmulateMediaOptions = {
|
export type PageEmulateMediaOptions = {
|
||||||
media?: 'screen' | 'print' | 'null',
|
media?: 'screen' | 'print' | 'no-override',
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference' | 'null',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference' | 'null',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none' | 'null',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
};
|
};
|
||||||
export type PageEmulateMediaResult = void;
|
export type PageEmulateMediaResult = void;
|
||||||
export type PageExposeBindingParams = {
|
export type PageExposeBindingParams = {
|
||||||
|
|
@ -3856,7 +3856,7 @@ export type ElectronLaunchParams = {
|
||||||
timeout?: number,
|
timeout?: number,
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
bypassCSP?: boolean,
|
bypassCSP?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
extraHTTPHeaders?: NameValue[],
|
extraHTTPHeaders?: NameValue[],
|
||||||
geolocation?: {
|
geolocation?: {
|
||||||
longitude: number,
|
longitude: number,
|
||||||
|
|
@ -3889,7 +3889,7 @@ export type ElectronLaunchOptions = {
|
||||||
timeout?: number,
|
timeout?: number,
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
bypassCSP?: boolean,
|
bypassCSP?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
extraHTTPHeaders?: NameValue[],
|
extraHTTPHeaders?: NameValue[],
|
||||||
geolocation?: {
|
geolocation?: {
|
||||||
longitude: number,
|
longitude: number,
|
||||||
|
|
@ -4272,9 +4272,9 @@ export type AndroidDeviceLaunchBrowserParams = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
@ -4326,9 +4326,9 @@ export type AndroidDeviceLaunchBrowserOptions = {
|
||||||
deviceScaleFactor?: number,
|
deviceScaleFactor?: number,
|
||||||
isMobile?: boolean,
|
isMobile?: boolean,
|
||||||
hasTouch?: boolean,
|
hasTouch?: boolean,
|
||||||
colorScheme?: 'dark' | 'light' | 'no-preference',
|
colorScheme?: 'dark' | 'light' | 'no-preference' | 'no-override',
|
||||||
reducedMotion?: 'reduce' | 'no-preference',
|
reducedMotion?: 'reduce' | 'no-preference' | 'no-override',
|
||||||
forcedColors?: 'active' | 'none',
|
forcedColors?: 'active' | 'none' | 'no-override',
|
||||||
acceptDownloads?: boolean,
|
acceptDownloads?: boolean,
|
||||||
baseURL?: string,
|
baseURL?: string,
|
||||||
recordVideo?: {
|
recordVideo?: {
|
||||||
|
|
|
||||||
|
|
@ -445,16 +445,19 @@ ContextOptions:
|
||||||
- dark
|
- dark
|
||||||
- light
|
- light
|
||||||
- no-preference
|
- no-preference
|
||||||
|
- no-override
|
||||||
reducedMotion:
|
reducedMotion:
|
||||||
type: enum?
|
type: enum?
|
||||||
literals:
|
literals:
|
||||||
- reduce
|
- reduce
|
||||||
- no-preference
|
- no-preference
|
||||||
|
- no-override
|
||||||
forcedColors:
|
forcedColors:
|
||||||
type: enum?
|
type: enum?
|
||||||
literals:
|
literals:
|
||||||
- active
|
- active
|
||||||
- none
|
- none
|
||||||
|
- no-override
|
||||||
acceptDownloads: boolean?
|
acceptDownloads: boolean?
|
||||||
baseURL: string?
|
baseURL: string?
|
||||||
recordVideo:
|
recordVideo:
|
||||||
|
|
@ -1173,30 +1176,26 @@ Page:
|
||||||
literals:
|
literals:
|
||||||
- screen
|
- screen
|
||||||
- print
|
- print
|
||||||
# Reset emulated value to the system default.
|
- no-override
|
||||||
- null
|
|
||||||
colorScheme:
|
colorScheme:
|
||||||
type: enum?
|
type: enum?
|
||||||
literals:
|
literals:
|
||||||
- dark
|
- dark
|
||||||
- light
|
- light
|
||||||
- no-preference
|
- no-preference
|
||||||
# Reset emulated value to the system default.
|
- no-override
|
||||||
- null
|
|
||||||
reducedMotion:
|
reducedMotion:
|
||||||
type: enum?
|
type: enum?
|
||||||
literals:
|
literals:
|
||||||
- reduce
|
- reduce
|
||||||
- no-preference
|
- no-preference
|
||||||
# Reset emulated value to the system default.
|
- no-override
|
||||||
- null
|
|
||||||
forcedColors:
|
forcedColors:
|
||||||
type: enum?
|
type: enum?
|
||||||
literals:
|
literals:
|
||||||
- active
|
- active
|
||||||
- none
|
- none
|
||||||
# Reset emulated value to the system default.
|
- no-override
|
||||||
- null
|
|
||||||
|
|
||||||
exposeBinding:
|
exposeBinding:
|
||||||
parameters:
|
parameters:
|
||||||
|
|
@ -2974,6 +2973,7 @@ Electron:
|
||||||
- dark
|
- dark
|
||||||
- light
|
- light
|
||||||
- no-preference
|
- no-preference
|
||||||
|
- no-override
|
||||||
extraHTTPHeaders:
|
extraHTTPHeaders:
|
||||||
type: array?
|
type: array?
|
||||||
items: NameValue
|
items: NameValue
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ it('should throw in case of bad media argument', async ({ page }) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
// @ts-expect-error 'bad' is not a valid media type
|
// @ts-expect-error 'bad' is not a valid media type
|
||||||
await page.emulateMedia({ media: 'bad' }).catch(e => error = e);
|
await page.emulateMedia({ media: 'bad' }).catch(e => error = e);
|
||||||
expect(error.message).toContain('media: expected one of (screen|print|null)');
|
expect(error.message).toContain('media: expected one of (screen|print|no-override)');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should emulate colorScheme should work @smoke', async ({ page }) => {
|
it('should emulate colorScheme should work @smoke', async ({ page }) => {
|
||||||
|
|
@ -64,7 +64,7 @@ it('should throw in case of bad colorScheme argument', async ({ page }) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
// @ts-expect-error 'bad' is not a valid media type
|
// @ts-expect-error 'bad' is not a valid media type
|
||||||
await page.emulateMedia({ colorScheme: 'bad' }).catch(e => error = e);
|
await page.emulateMedia({ colorScheme: 'bad' }).catch(e => error = e);
|
||||||
expect(error.message).toContain('colorScheme: expected one of (dark|light|no-preference|null)');
|
expect(error.message).toContain('colorScheme: expected one of (dark|light|no-preference|no-override)');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should work during navigation', async ({ page, server }) => {
|
it('should work during navigation', async ({ page, server }) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue