feat(bringToFront): enable on all browsers (#3052)
This commit is contained in:
parent
a03f1dd156
commit
99658c2d32
|
|
@ -7,7 +7,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "firefox",
|
"name": "firefox",
|
||||||
"revision": "1128"
|
"revision": "1134"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "webkit",
|
"name": "webkit",
|
||||||
|
|
|
||||||
|
|
@ -702,6 +702,7 @@ page.removeListener('request', logRequest);
|
||||||
- [page.addInitScript(script[, arg])](#pageaddinitscriptscript-arg)
|
- [page.addInitScript(script[, arg])](#pageaddinitscriptscript-arg)
|
||||||
- [page.addScriptTag(options)](#pageaddscripttagoptions)
|
- [page.addScriptTag(options)](#pageaddscripttagoptions)
|
||||||
- [page.addStyleTag(options)](#pageaddstyletagoptions)
|
- [page.addStyleTag(options)](#pageaddstyletagoptions)
|
||||||
|
- [page.bringToFront()](#pagebringtofront)
|
||||||
- [page.check(selector, [options])](#pagecheckselector-options)
|
- [page.check(selector, [options])](#pagecheckselector-options)
|
||||||
- [page.click(selector[, options])](#pageclickselector-options)
|
- [page.click(selector[, options])](#pageclickselector-options)
|
||||||
- [page.close([options])](#pagecloseoptions)
|
- [page.close([options])](#pagecloseoptions)
|
||||||
|
|
@ -1007,6 +1008,14 @@ Adds a `<link rel="stylesheet">` tag into the page with the desired url or a `<s
|
||||||
|
|
||||||
Shortcut for [page.mainFrame().addStyleTag(options)](#frameaddstyletagoptions).
|
Shortcut for [page.mainFrame().addStyleTag(options)](#frameaddstyletagoptions).
|
||||||
|
|
||||||
|
|
||||||
|
#### page.bringToFront()
|
||||||
|
|
||||||
|
- returns: <[Promise]>
|
||||||
|
|
||||||
|
Brings page to front (activates tab).
|
||||||
|
|
||||||
|
|
||||||
#### page.check(selector, [options])
|
#### page.check(selector, [options])
|
||||||
- `selector` <[string]> A selector to search for checkbox or radio button to check. If there are multiple elements satisfying the selector, the first will be checked. See [working with selectors](#working-with-selectors) for more details.
|
- `selector` <[string]> A selector to search for checkbox or radio button to check. If there are multiple elements satisfying the selector, the first will be checked. See [working with selectors](#working-with-selectors) for more details.
|
||||||
- `options` <[Object]>
|
- `options` <[Object]>
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,10 @@ export class CRPage implements PageDelegate {
|
||||||
await this._mainFrameSession._updateViewport();
|
await this._mainFrameSession._updateViewport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async bringToFront(): Promise<void> {
|
||||||
|
await this._mainFrameSession._client.send('Page.bringToFront');
|
||||||
|
}
|
||||||
|
|
||||||
async updateEmulateMedia(): Promise<void> {
|
async updateEmulateMedia(): Promise<void> {
|
||||||
await this._forAllFrameSessions(frame => frame._updateEmulateMedia());
|
await this._forAllFrameSessions(frame => frame._updateEmulateMedia());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -286,6 +286,10 @@ export class FFPage implements PageDelegate {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async bringToFront(): Promise<void> {
|
||||||
|
await this._session.send('Page.bringToFront', {});
|
||||||
|
}
|
||||||
|
|
||||||
async updateEmulateMedia(): Promise<void> {
|
async updateEmulateMedia(): Promise<void> {
|
||||||
const colorScheme = this._page._state.colorScheme || this._browserContext._options.colorScheme || 'light';
|
const colorScheme = this._page._state.colorScheme || this._browserContext._options.colorScheme || 'light';
|
||||||
await this._session.send('Page.setEmulatedMedia', {
|
await this._session.send('Page.setEmulatedMedia', {
|
||||||
|
|
|
||||||
|
|
@ -409,6 +409,9 @@ export module Protocol {
|
||||||
}|null;
|
}|null;
|
||||||
};
|
};
|
||||||
export type setViewportSizeReturnValue = void;
|
export type setViewportSizeReturnValue = void;
|
||||||
|
export type bringToFrontParameters = {
|
||||||
|
};
|
||||||
|
export type bringToFrontReturnValue = void;
|
||||||
export type setEmulatedMediaParameters = {
|
export type setEmulatedMediaParameters = {
|
||||||
type?: ("screen"|"print"|"");
|
type?: ("screen"|"print"|"");
|
||||||
colorScheme?: ("dark"|"light"|"no-preference");
|
colorScheme?: ("dark"|"light"|"no-preference");
|
||||||
|
|
@ -963,6 +966,7 @@ export module Protocol {
|
||||||
"Page.setFileInputFiles": Page.setFileInputFilesParameters;
|
"Page.setFileInputFiles": Page.setFileInputFilesParameters;
|
||||||
"Page.addBinding": Page.addBindingParameters;
|
"Page.addBinding": Page.addBindingParameters;
|
||||||
"Page.setViewportSize": Page.setViewportSizeParameters;
|
"Page.setViewportSize": Page.setViewportSizeParameters;
|
||||||
|
"Page.bringToFront": Page.bringToFrontParameters;
|
||||||
"Page.setEmulatedMedia": Page.setEmulatedMediaParameters;
|
"Page.setEmulatedMedia": Page.setEmulatedMediaParameters;
|
||||||
"Page.setCacheDisabled": Page.setCacheDisabledParameters;
|
"Page.setCacheDisabled": Page.setCacheDisabledParameters;
|
||||||
"Page.describeNode": Page.describeNodeParameters;
|
"Page.describeNode": Page.describeNodeParameters;
|
||||||
|
|
@ -1033,6 +1037,7 @@ export module Protocol {
|
||||||
"Page.setFileInputFiles": Page.setFileInputFilesReturnValue;
|
"Page.setFileInputFiles": Page.setFileInputFilesReturnValue;
|
||||||
"Page.addBinding": Page.addBindingReturnValue;
|
"Page.addBinding": Page.addBindingReturnValue;
|
||||||
"Page.setViewportSize": Page.setViewportSizeReturnValue;
|
"Page.setViewportSize": Page.setViewportSizeReturnValue;
|
||||||
|
"Page.bringToFront": Page.bringToFrontReturnValue;
|
||||||
"Page.setEmulatedMedia": Page.setEmulatedMediaReturnValue;
|
"Page.setEmulatedMedia": Page.setEmulatedMediaReturnValue;
|
||||||
"Page.setCacheDisabled": Page.setCacheDisabledReturnValue;
|
"Page.setCacheDisabled": Page.setCacheDisabledReturnValue;
|
||||||
"Page.describeNode": Page.describeNodeReturnValue;
|
"Page.describeNode": Page.describeNodeReturnValue;
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ export interface PageDelegate {
|
||||||
updateEmulateMedia(): Promise<void>;
|
updateEmulateMedia(): Promise<void>;
|
||||||
updateRequestInterception(): Promise<void>;
|
updateRequestInterception(): Promise<void>;
|
||||||
setFileChooserIntercepted(enabled: boolean): Promise<void>;
|
setFileChooserIntercepted(enabled: boolean): Promise<void>;
|
||||||
|
bringToFront(): Promise<void>;
|
||||||
|
|
||||||
canScreenshotOutsideViewport(): boolean;
|
canScreenshotOutsideViewport(): boolean;
|
||||||
resetViewport(): Promise<void>; // Only called if canScreenshotOutsideViewport() returns false.
|
resetViewport(): Promise<void>; // Only called if canScreenshotOutsideViewport() returns false.
|
||||||
|
|
@ -403,6 +404,10 @@ export class Page extends EventEmitter {
|
||||||
return this._state.viewportSize;
|
return this._state.viewportSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async bringToFront(): Promise<void> {
|
||||||
|
await this._delegate.bringToFront();
|
||||||
|
}
|
||||||
|
|
||||||
async evaluate<R, Arg>(pageFunction: js.Func1<Arg, R>, arg: Arg): Promise<R>;
|
async evaluate<R, Arg>(pageFunction: js.Func1<Arg, R>, arg: Arg): Promise<R>;
|
||||||
async evaluate<R>(pageFunction: js.Func1<void, R>, arg?: any): Promise<R>;
|
async evaluate<R>(pageFunction: js.Func1<void, R>, arg?: any): Promise<R>;
|
||||||
async evaluate<R, Arg>(pageFunction: js.Func1<Arg, R>, arg: Arg): Promise<R> {
|
async evaluate<R, Arg>(pageFunction: js.Func1<Arg, R>, arg: Arg): Promise<R> {
|
||||||
|
|
|
||||||
|
|
@ -544,6 +544,7 @@ export interface PageChannel extends Channel {
|
||||||
crStopJSCoverage(params?: PageCrStopJSCoverageParams): Promise<PageCrStopJSCoverageResult>;
|
crStopJSCoverage(params?: PageCrStopJSCoverageParams): Promise<PageCrStopJSCoverageResult>;
|
||||||
crStartCSSCoverage(params: PageCrStartCSSCoverageParams): Promise<PageCrStartCSSCoverageResult>;
|
crStartCSSCoverage(params: PageCrStartCSSCoverageParams): Promise<PageCrStartCSSCoverageResult>;
|
||||||
crStopCSSCoverage(params?: PageCrStopCSSCoverageParams): Promise<PageCrStopCSSCoverageResult>;
|
crStopCSSCoverage(params?: PageCrStopCSSCoverageParams): Promise<PageCrStopCSSCoverageResult>;
|
||||||
|
bringToFront(params?: PageBringToFrontParams): Promise<PageBringToFrontResult>;
|
||||||
}
|
}
|
||||||
export type PageBindingCallEvent = {
|
export type PageBindingCallEvent = {
|
||||||
binding: BindingCallChannel,
|
binding: BindingCallChannel,
|
||||||
|
|
@ -798,6 +799,8 @@ export type PageCrStopCSSCoverageResult = {
|
||||||
}[],
|
}[],
|
||||||
}[],
|
}[],
|
||||||
};
|
};
|
||||||
|
export type PageBringToFrontParams = {};
|
||||||
|
export type PageBringToFrontResult = void;
|
||||||
|
|
||||||
// ----------- Frame -----------
|
// ----------- Frame -----------
|
||||||
export type FrameInitializer = {
|
export type FrameInitializer = {
|
||||||
|
|
|
||||||
|
|
@ -414,6 +414,12 @@ export class Page extends ChannelOwner<PageChannel, PageInitializer> {
|
||||||
return this._attributeToPage(() => this._mainFrame.title());
|
return this._attributeToPage(() => this._mainFrame.title());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async bringToFront(): Promise<void> {
|
||||||
|
return this._wrapApiCall('page.bringToFront', async () => {
|
||||||
|
await this._channel.bringToFront();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async close(options: { runBeforeUnload?: boolean } = {runBeforeUnload: undefined}) {
|
async close(options: { runBeforeUnload?: boolean } = {runBeforeUnload: undefined}) {
|
||||||
return this._wrapApiCall('page.close', async () => {
|
return this._wrapApiCall('page.close', async () => {
|
||||||
await this._channel.close(options);
|
await this._channel.close(options);
|
||||||
|
|
|
||||||
|
|
@ -718,6 +718,8 @@ interface Page
|
||||||
start: number
|
start: number
|
||||||
end: number
|
end: number
|
||||||
|
|
||||||
|
command bringToFront
|
||||||
|
|
||||||
interface Frame
|
interface Frame
|
||||||
initializer
|
initializer
|
||||||
url: string
|
url: string
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,10 @@ export class PageDispatcher extends Dispatcher<Page, PageInitializer> implements
|
||||||
return { pdf: buffer.toString('base64') };
|
return { pdf: buffer.toString('base64') };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async bringToFront(): Promise<void> {
|
||||||
|
await this._page.bringToFront();
|
||||||
|
}
|
||||||
|
|
||||||
async crStartJSCoverage(params: types.JSCoverageOptions): Promise<void> {
|
async crStartJSCoverage(params: types.JSCoverageOptions): Promise<void> {
|
||||||
const coverage = this._page.coverage as CRCoverage;
|
const coverage = this._page.coverage as CRCoverage;
|
||||||
await coverage.startJSCoverage(params);
|
await coverage.startJSCoverage(params);
|
||||||
|
|
|
||||||
|
|
@ -576,6 +576,12 @@ export class WKPage implements PageDelegate {
|
||||||
await this._updateViewport();
|
await this._updateViewport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async bringToFront(): Promise<void> {
|
||||||
|
this._pageProxySession.send('Target.activate', {
|
||||||
|
targetId: this._session.sessionId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async _updateViewport(): Promise<void> {
|
async _updateViewport(): Promise<void> {
|
||||||
const options = this._browserContext._options;
|
const options = this._browserContext._options;
|
||||||
const viewportSize = this._page._state.viewportSize;
|
const viewportSize = this._page._state.viewportSize;
|
||||||
|
|
|
||||||
|
|
@ -143,4 +143,22 @@ describe('Headful', function() {
|
||||||
await context.close();
|
await context.close();
|
||||||
await browser.close();
|
await browser.close();
|
||||||
});
|
});
|
||||||
|
it('Page.bringToFront should work', async ({browserType, defaultBrowserOptions}) => {
|
||||||
|
const browser = await browserType.launch({...defaultBrowserOptions, headless: false });
|
||||||
|
const page1 = await browser.newPage();
|
||||||
|
await page1.setContent('Page1')
|
||||||
|
const page2 = await browser.newPage();
|
||||||
|
await page2.setContent('Page2')
|
||||||
|
|
||||||
|
await page1.bringToFront();
|
||||||
|
expect(await page1.evaluate('document.visibilityState')).toBe('visible');
|
||||||
|
expect(await page2.evaluate('document.visibilityState')).toBe('visible');
|
||||||
|
|
||||||
|
await page2.bringToFront();
|
||||||
|
expect(await page1.evaluate('document.visibilityState')).toBe('visible');
|
||||||
|
expect(await page2.evaluate('document.visibilityState')).toBe(
|
||||||
|
'visible'
|
||||||
|
);
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue