mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
test: enable addScriptTag tests (#10583)
This commit is contained in:
parent
d71836e7ed
commit
c7f3fb21be
@ -764,9 +764,64 @@ export class Frame {
|
|||||||
*/
|
*/
|
||||||
async addScriptTag(
|
async addScriptTag(
|
||||||
options: FrameAddScriptTagOptions
|
options: FrameAddScriptTagOptions
|
||||||
): Promise<ElementHandle<HTMLScriptElement>>;
|
): Promise<ElementHandle<HTMLScriptElement>> {
|
||||||
async addScriptTag(): Promise<ElementHandle<HTMLScriptElement>> {
|
let {content = '', type} = options;
|
||||||
throw new Error('Not implemented');
|
const {path} = options;
|
||||||
|
if (+!!options.url + +!!path + +!!content !== 1) {
|
||||||
|
throw new Error(
|
||||||
|
'Exactly one of `url`, `path`, or `content` must be specified.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path) {
|
||||||
|
const fs = await importFSPromises();
|
||||||
|
content = await fs.readFile(path, 'utf8');
|
||||||
|
content += `//# sourceURL=${path.replace(/\n/g, '')}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
type = type ?? 'text/javascript';
|
||||||
|
|
||||||
|
return this.mainRealm().transferHandle(
|
||||||
|
await this.isolatedRealm().evaluateHandle(
|
||||||
|
async ({Deferred}, {url, id, type, content}) => {
|
||||||
|
const deferred = Deferred.create<void>();
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.type = type;
|
||||||
|
script.text = content;
|
||||||
|
if (url) {
|
||||||
|
script.src = url;
|
||||||
|
script.addEventListener(
|
||||||
|
'load',
|
||||||
|
() => {
|
||||||
|
return deferred.resolve();
|
||||||
|
},
|
||||||
|
{once: true}
|
||||||
|
);
|
||||||
|
script.addEventListener(
|
||||||
|
'error',
|
||||||
|
event => {
|
||||||
|
deferred.reject(
|
||||||
|
new Error(event.message ?? 'Could not load script')
|
||||||
|
);
|
||||||
|
},
|
||||||
|
{once: true}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
deferred.resolve();
|
||||||
|
}
|
||||||
|
if (id) {
|
||||||
|
script.id = id;
|
||||||
|
}
|
||||||
|
document.head.appendChild(script);
|
||||||
|
await deferred.valueOrThrow();
|
||||||
|
return script;
|
||||||
|
},
|
||||||
|
LazyArg.create(context => {
|
||||||
|
return context.puppeteerUtil;
|
||||||
|
}),
|
||||||
|
{...options, type, content}
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1183,9 +1183,8 @@ export class Page extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async addScriptTag(
|
async addScriptTag(
|
||||||
options: FrameAddScriptTagOptions
|
options: FrameAddScriptTagOptions
|
||||||
): Promise<ElementHandle<HTMLScriptElement>>;
|
): Promise<ElementHandle<HTMLScriptElement>> {
|
||||||
async addScriptTag(): Promise<ElementHandle<HTMLScriptElement>> {
|
return this.mainFrame().addScriptTag(options);
|
||||||
throw new Error('Not implemented');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import {Protocol} from 'devtools-protocol';
|
import {Protocol} from 'devtools-protocol';
|
||||||
|
|
||||||
import {ElementHandle} from '../api/ElementHandle.js';
|
import {ElementHandle} from '../api/ElementHandle.js';
|
||||||
import {Frame as BaseFrame, FrameAddScriptTagOptions} from '../api/Frame.js';
|
import {Frame as BaseFrame} from '../api/Frame.js';
|
||||||
import {HTTPResponse} from '../api/HTTPResponse.js';
|
import {HTTPResponse} from '../api/HTTPResponse.js';
|
||||||
import {Page, WaitTimeoutOptions} from '../api/Page.js';
|
import {Page, WaitTimeoutOptions} from '../api/Page.js';
|
||||||
import {assert} from '../util/assert.js';
|
import {assert} from '../util/assert.js';
|
||||||
@ -33,10 +33,9 @@ import {ExecutionContext} from './ExecutionContext.js';
|
|||||||
import {FrameManager} from './FrameManager.js';
|
import {FrameManager} from './FrameManager.js';
|
||||||
import {IsolatedWorld} from './IsolatedWorld.js';
|
import {IsolatedWorld} from './IsolatedWorld.js';
|
||||||
import {MAIN_WORLD, PUPPETEER_WORLD} from './IsolatedWorlds.js';
|
import {MAIN_WORLD, PUPPETEER_WORLD} from './IsolatedWorlds.js';
|
||||||
import {LazyArg} from './LazyArg.js';
|
|
||||||
import {LifecycleWatcher, PuppeteerLifeCycleEvent} from './LifecycleWatcher.js';
|
import {LifecycleWatcher, PuppeteerLifeCycleEvent} from './LifecycleWatcher.js';
|
||||||
import {EvaluateFunc, EvaluateFuncWith, HandleFor, NodeFor} from './types.js';
|
import {EvaluateFunc, EvaluateFuncWith, HandleFor, NodeFor} from './types.js';
|
||||||
import {importFSPromises, withSourcePuppeteerURLIfNone} from './util.js';
|
import {withSourcePuppeteerURLIfNone} from './util.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -333,68 +332,6 @@ export class Frame extends BaseFrame {
|
|||||||
return this.#detached;
|
return this.#detached;
|
||||||
}
|
}
|
||||||
|
|
||||||
override async addScriptTag(
|
|
||||||
options: FrameAddScriptTagOptions
|
|
||||||
): Promise<ElementHandle<HTMLScriptElement>> {
|
|
||||||
let {content = '', type} = options;
|
|
||||||
const {path} = options;
|
|
||||||
if (+!!options.url + +!!path + +!!content !== 1) {
|
|
||||||
throw new Error(
|
|
||||||
'Exactly one of `url`, `path`, or `content` must be specified.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (path) {
|
|
||||||
const fs = await importFSPromises();
|
|
||||||
content = await fs.readFile(path, 'utf8');
|
|
||||||
content += `//# sourceURL=${path.replace(/\n/g, '')}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
type = type ?? 'text/javascript';
|
|
||||||
|
|
||||||
return this.mainRealm().transferHandle(
|
|
||||||
await this.isolatedRealm().evaluateHandle(
|
|
||||||
async ({Deferred}, {url, id, type, content}) => {
|
|
||||||
const deferred = Deferred.create<void>();
|
|
||||||
const script = document.createElement('script');
|
|
||||||
script.type = type;
|
|
||||||
script.text = content;
|
|
||||||
if (url) {
|
|
||||||
script.src = url;
|
|
||||||
script.addEventListener(
|
|
||||||
'load',
|
|
||||||
() => {
|
|
||||||
return deferred.resolve();
|
|
||||||
},
|
|
||||||
{once: true}
|
|
||||||
);
|
|
||||||
script.addEventListener(
|
|
||||||
'error',
|
|
||||||
event => {
|
|
||||||
deferred.reject(
|
|
||||||
new Error(event.message ?? 'Could not load script')
|
|
||||||
);
|
|
||||||
},
|
|
||||||
{once: true}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
deferred.resolve();
|
|
||||||
}
|
|
||||||
if (id) {
|
|
||||||
script.id = id;
|
|
||||||
}
|
|
||||||
document.head.appendChild(script);
|
|
||||||
await deferred.valueOrThrow();
|
|
||||||
return script;
|
|
||||||
},
|
|
||||||
LazyArg.create(context => {
|
|
||||||
return context.puppeteerUtil;
|
|
||||||
}),
|
|
||||||
{...options, type, content}
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
override async title(): Promise<string> {
|
override async title(): Promise<string> {
|
||||||
return this.isolatedRealm().title();
|
return this.isolatedRealm().title();
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import {Protocol} from 'devtools-protocol';
|
|||||||
import type {Browser} from '../api/Browser.js';
|
import type {Browser} from '../api/Browser.js';
|
||||||
import type {BrowserContext} from '../api/BrowserContext.js';
|
import type {BrowserContext} from '../api/BrowserContext.js';
|
||||||
import {ElementHandle} from '../api/ElementHandle.js';
|
import {ElementHandle} from '../api/ElementHandle.js';
|
||||||
import {Frame, FrameAddScriptTagOptions} from '../api/Frame.js';
|
import {Frame} from '../api/Frame.js';
|
||||||
import {HTTPRequest} from '../api/HTTPRequest.js';
|
import {HTTPRequest} from '../api/HTTPRequest.js';
|
||||||
import {HTTPResponse} from '../api/HTTPResponse.js';
|
import {HTTPResponse} from '../api/HTTPResponse.js';
|
||||||
import {JSHandle} from '../api/JSHandle.js';
|
import {JSHandle} from '../api/JSHandle.js';
|
||||||
@ -578,12 +578,6 @@ export class CDPPage extends Page {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override async addScriptTag(
|
|
||||||
options: FrameAddScriptTagOptions
|
|
||||||
): Promise<ElementHandle<HTMLScriptElement>> {
|
|
||||||
return this.mainFrame().addScriptTag(options);
|
|
||||||
}
|
|
||||||
|
|
||||||
override async exposeFunction(
|
override async exposeFunction(
|
||||||
name: string,
|
name: string,
|
||||||
pptrFunction: Function | {default: Function}
|
pptrFunction: Function | {default: Function}
|
||||||
|
@ -155,6 +155,12 @@
|
|||||||
"parameters": ["webDriverBiDi"],
|
"parameters": ["webDriverBiDi"],
|
||||||
"expectations": ["FAIL", "TIMEOUT"]
|
"expectations": ["FAIL", "TIMEOUT"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"testIdPattern": "[page.spec] Page Page.addScriptTag *",
|
||||||
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
"parameters": ["webDriverBiDi"],
|
||||||
|
"expectations": ["PASS"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.addStyleTag *",
|
"testIdPattern": "[page.spec] Page Page.addStyleTag *",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
@ -311,6 +317,12 @@
|
|||||||
"parameters": ["webDriverBiDi"],
|
"parameters": ["webDriverBiDi"],
|
||||||
"expectations": ["PASS"]
|
"expectations": ["PASS"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"testIdPattern": "[CDPSession.spec] Target.createCDPSession *",
|
||||||
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
"parameters": ["firefox", "webDriverBiDi"],
|
||||||
|
"expectations": ["FAIL"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[CDPSession.spec] Target.createCDPSession should not report created targets for custom CDP sessions",
|
"testIdPattern": "[CDPSession.spec] Target.createCDPSession should not report created targets for custom CDP sessions",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
@ -1107,13 +1119,7 @@
|
|||||||
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with content to the CSP page",
|
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with content to the CSP page",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
"parameters": ["webDriverBiDi"],
|
"parameters": ["webDriverBiDi"],
|
||||||
"expectations": ["PASS"]
|
"expectations": ["FAIL"]
|
||||||
},
|
|
||||||
{
|
|
||||||
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with URL to the CSP page",
|
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
|
||||||
"parameters": ["webDriverBiDi"],
|
|
||||||
"expectations": ["PASS"]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.addStyleTag should throw when added with content to the CSP page",
|
"testIdPattern": "[page.spec] Page Page.addStyleTag should throw when added with content to the CSP page",
|
||||||
@ -3053,12 +3059,6 @@
|
|||||||
"parameters": ["cdp", "firefox"],
|
"parameters": ["cdp", "firefox"],
|
||||||
"expectations": ["FAIL"]
|
"expectations": ["FAIL"]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw an error if loading from url fail",
|
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
|
||||||
"parameters": ["firefox", "webDriverBiDi"],
|
|
||||||
"expectations": ["PASS"]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with content to the CSP page",
|
"testIdPattern": "[page.spec] Page Page.addScriptTag should throw when added with content to the CSP page",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
Loading…
Reference in New Issue
Block a user