mirror of
https://github.com/microsoft/playwright.git
synced 2024-11-28 09:23:42 +03:00
feat(acceptDownload): revert acceptDownload (#10709)
This commit is contained in:
parent
518d67add5
commit
7765131a14
@ -56,12 +56,6 @@ var download = await page.RunAndWaitForDownloadAsync(async () =>
|
||||
Console.WriteLine(await download.PathAsync());
|
||||
```
|
||||
|
||||
:::note
|
||||
Browser context **must** be created with the [`option: acceptDownloads`] set to `true` when user needs access to the
|
||||
downloaded content. If [`option: acceptDownloads`] is not set, download events are emitted, but the actual download is
|
||||
not performed and user has no access to the downloaded files.
|
||||
:::
|
||||
|
||||
## async method: Download.cancel
|
||||
|
||||
Cancels a download. Will not fail if the download is already finished or canceled.
|
||||
|
@ -297,12 +297,6 @@ event is dispatched.
|
||||
Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
|
||||
[Download] instance.
|
||||
|
||||
:::note
|
||||
Browser context **must** be created with the [`option: acceptDownloads`] set to `true` when user needs access to the
|
||||
downloaded content. If [`option: acceptDownloads`] is not set, download events are emitted, but the actual download is
|
||||
not performed and user has no access to the downloaded files.
|
||||
:::
|
||||
|
||||
## event: Page.fileChooser
|
||||
- argument: <[FileChooser]>
|
||||
|
||||
|
@ -250,7 +250,7 @@ state is still returned, but won't be saved to the disk.
|
||||
## context-option-acceptdownloads
|
||||
- `acceptDownloads` <[boolean]>
|
||||
|
||||
Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
|
||||
## context-option-ignorehttpserrors
|
||||
- `ignoreHTTPSErrors` <[boolean]>
|
||||
|
@ -7,9 +7,9 @@ title: "Downloads"
|
||||
For uploading files, see the [uploading files](./input.md#upload-files) section.
|
||||
:::
|
||||
|
||||
For every attachment downloaded by the page, [`event: Page.download`] event is emitted. If you create a browser context
|
||||
with the [`option: acceptDownloads`] set, all these attachments are going to be downloaded into a temporary folder. You
|
||||
can obtain the download url, file system path and payload stream using the [Download] object from the event.
|
||||
For every attachment downloaded by the page, [`event: Page.download`] event is emitted. All these attachments are going
|
||||
to be downloaded into a temporary folder. You can obtain the download url, file system path and payload stream using
|
||||
the [Download] object from the event.
|
||||
|
||||
You can specify where to persist downloaded files using the [`option: downloadsPath`] option in [`method: BrowserType.launch`].
|
||||
|
||||
|
@ -342,7 +342,7 @@ export default config;
|
||||
|
||||
Available options to configure networking:
|
||||
|
||||
- `acceptDownloads` - Whether to automatically download all the attachments. [Learn more](./downloads.md) about working with downloads.
|
||||
- `acceptDownloads` - Whether to automatically download all the attachments, defaults to `true`. [Learn more](./downloads.md) about working with downloads.
|
||||
- `extraHTTPHeaders` - An object containing additional HTTP headers to be sent with every request. All header values must be strings.
|
||||
- `httpCredentials` - Credentials for [HTTP authentication](./network.md#http-authentication).
|
||||
- `ignoreHTTPSErrors` - Whether to ignore HTTPS errors during navigation.
|
||||
|
@ -332,8 +332,6 @@ async function launchContext(options: Options, headless: boolean, executablePath
|
||||
if (contextOptions.isMobile && browserType.name() === 'firefox')
|
||||
contextOptions.isMobile = undefined;
|
||||
|
||||
contextOptions.acceptDownloads = true;
|
||||
|
||||
// Proxy
|
||||
|
||||
if (options.proxyServer) {
|
||||
@ -441,7 +439,6 @@ async function launchContext(options: Options, headless: boolean, executablePath
|
||||
delete launchOptions.headless;
|
||||
delete launchOptions.executablePath;
|
||||
delete contextOptions.deviceScaleFactor;
|
||||
delete contextOptions.acceptDownloads;
|
||||
return { browser, browserName: browserType.name(), context, contextOptions, launchOptions };
|
||||
}
|
||||
|
||||
|
@ -402,6 +402,8 @@ export function validateBrowserContextOptions(options: types.BrowserContextOptio
|
||||
throw new Error(`"deviceScaleFactor" option is not supported with null "viewport"`);
|
||||
if (options.noDefaultViewport && options.isMobile !== undefined)
|
||||
throw new Error(`"isMobile" option is not supported with null "viewport"`);
|
||||
if (options.acceptDownloads === undefined)
|
||||
options.acceptDownloads = true;
|
||||
if (!options.viewport && !options.noDefaultViewport)
|
||||
options.viewport = { width: 1280, height: 720 };
|
||||
if (options.recordVideo) {
|
||||
|
@ -129,10 +129,6 @@ export class CodeGenerator extends EventEmitter {
|
||||
if (!this._enabled)
|
||||
return;
|
||||
|
||||
// We'll need to pass acceptDownloads for any generated downloads code to work.
|
||||
if (signal.name === 'download')
|
||||
this._options.contextOptions.acceptDownloads = true;
|
||||
|
||||
// Signal either arrives while action is being performed or shortly after.
|
||||
if (this._currentAction) {
|
||||
this._currentAction.action.signals.push(signal);
|
||||
|
25
packages/playwright-core/types/types.d.ts
vendored
25
packages/playwright-core/types/types.d.ts
vendored
@ -902,10 +902,6 @@ export interface Page {
|
||||
/**
|
||||
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
|
||||
* [Download] instance.
|
||||
*
|
||||
* > NOTE: Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the
|
||||
* downloaded content. If `acceptDownloads` is not set, download events are emitted, but the actual download is not
|
||||
* performed and user has no access to the downloaded files.
|
||||
*/
|
||||
on(event: 'download', listener: (download: Download) => void): this;
|
||||
|
||||
@ -1175,10 +1171,6 @@ export interface Page {
|
||||
/**
|
||||
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
|
||||
* [Download] instance.
|
||||
*
|
||||
* > NOTE: Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the
|
||||
* downloaded content. If `acceptDownloads` is not set, download events are emitted, but the actual download is not
|
||||
* performed and user has no access to the downloaded files.
|
||||
*/
|
||||
addListener(event: 'download', listener: (download: Download) => void): this;
|
||||
|
||||
@ -3525,10 +3517,6 @@ export interface Page {
|
||||
/**
|
||||
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
|
||||
* [Download] instance.
|
||||
*
|
||||
* > NOTE: Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the
|
||||
* downloaded content. If `acceptDownloads` is not set, download events are emitted, but the actual download is not
|
||||
* performed and user has no access to the downloaded files.
|
||||
*/
|
||||
waitForEvent(event: 'download', optionsOrPredicate?: { predicate?: (download: Download) => boolean | Promise<boolean>, timeout?: number } | ((download: Download) => boolean | Promise<boolean>)): Promise<Download>;
|
||||
|
||||
@ -9948,7 +9936,7 @@ export interface BrowserType<Unused = {}> {
|
||||
*/
|
||||
launchPersistentContext(userDataDir: string, options?: {
|
||||
/**
|
||||
* Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
* Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
*/
|
||||
acceptDownloads?: boolean;
|
||||
|
||||
@ -11176,7 +11164,7 @@ export interface AndroidDevice {
|
||||
*/
|
||||
launchBrowser(options?: {
|
||||
/**
|
||||
* Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
* Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
*/
|
||||
acceptDownloads?: boolean;
|
||||
|
||||
@ -12643,7 +12631,7 @@ export interface Browser extends EventEmitter {
|
||||
*/
|
||||
newPage(options?: {
|
||||
/**
|
||||
* Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
* Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
*/
|
||||
acceptDownloads?: boolean;
|
||||
|
||||
@ -13319,9 +13307,6 @@ export interface Dialog {
|
||||
* const path = await download.path();
|
||||
* ```
|
||||
*
|
||||
* > NOTE: Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the
|
||||
* downloaded content. If `acceptDownloads` is not set, download events are emitted, but the actual download is not
|
||||
* performed and user has no access to the downloaded files.
|
||||
*/
|
||||
export interface Download {
|
||||
/**
|
||||
@ -13435,7 +13420,7 @@ export interface Electron {
|
||||
*/
|
||||
launch(options?: {
|
||||
/**
|
||||
* Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
* Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
*/
|
||||
acceptDownloads?: boolean;
|
||||
|
||||
@ -15037,7 +15022,7 @@ export interface WebSocket {
|
||||
|
||||
export interface BrowserContextOptions {
|
||||
/**
|
||||
* Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
* Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
*/
|
||||
acceptDownloads?: boolean;
|
||||
|
||||
|
2
packages/playwright-test/types/test.d.ts
vendored
2
packages/playwright-test/types/test.d.ts
vendored
@ -2776,7 +2776,7 @@ export type VideoMode = 'off' | 'on' | 'retain-on-failure' | 'on-first-retry';
|
||||
*/
|
||||
export interface PlaywrightTestOptions {
|
||||
/**
|
||||
* Whether to automatically download all the attachments. Defaults to `false` where all the downloads are canceled.
|
||||
* Whether to automatically download all the attachments. Defaults to `true` where all the downloads are accepted.
|
||||
*/
|
||||
acceptDownloads: boolean | undefined;
|
||||
/**
|
||||
|
@ -417,7 +417,7 @@ test('should save download', async ({ server, browserType, startRemoteServer },
|
||||
|
||||
const remoteServer = await startRemoteServer();
|
||||
const browser = await browserType.connect({ wsEndpoint: remoteServer.wsEndpoint() });
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -441,7 +441,7 @@ test('should error when saving download after deletion', async ({ server, browse
|
||||
|
||||
const remoteServer = await startRemoteServer();
|
||||
const browser = await browserType.connect({ wsEndpoint: remoteServer.wsEndpoint() });
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
|
@ -174,7 +174,7 @@ it('should support offline option', async ({ server, launchPersistent }) => {
|
||||
it('should support acceptDownloads option', async ({ server, launchPersistent, mode }) => {
|
||||
it.skip(mode === 'service', 'download.path() is not avaialble in remote mode');
|
||||
|
||||
const { page } = await launchPersistent({ acceptDownloads: true });
|
||||
const { page } = await launchPersistent();
|
||||
server.setRoute('/download', (req, res) => {
|
||||
res.setHeader('Content-Type', 'application/octet-stream');
|
||||
res.setHeader('Content-Disposition', 'attachment');
|
||||
|
@ -51,7 +51,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report download when navigation turns into download', async ({ browser, server, browserName }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
const [ download, responseOrError ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
page.goto(server.PREFIX + '/download').catch(e => e)
|
||||
@ -77,7 +77,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should work with Cross-Origin-Opener-Policy', async ({ browser, server, browserName }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
const [ download, responseOrError ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
page.goto(server.PREFIX + '/downloadWithCOOP').catch(e => e)
|
||||
@ -103,7 +103,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report downloads with acceptDownloads: false', async ({ browser, server }) => {
|
||||
const page = await browser.newPage();
|
||||
const page = await browser.newPage({ acceptDownloads: false });
|
||||
await page.setContent(`<a href="${server.PREFIX}/downloadWithFilename">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -120,7 +120,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report downloads with acceptDownloads: true', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -133,7 +133,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report proper download url when download is from download attribute', async ({ browser, server, browserName }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.PREFIX + '/empty.html');
|
||||
await page.setContent(`<a href="${server.PREFIX}/chromium-linux.zip" download="foo.zip">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
@ -145,7 +145,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report downloads for download attribute', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.PREFIX + '/empty.html');
|
||||
await page.setContent(`<a href="${server.PREFIX}/chromium-linux.zip" download="foo.zip">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
@ -159,7 +159,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should save to user-specified path without updating original path', async ({ browser, server }, testInfo) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -177,7 +177,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should save to two different paths with multiple saveAs calls', async ({ browser, server }, testInfo) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -196,7 +196,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should save to overwritten filepath', async ({ browser, server }, testInfo) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -214,7 +214,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should create subdirectories when saving to non-existent user-specified path', async ({ browser, server }, testInfo) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -241,7 +241,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should error when saving after deletion', async ({ browser, server }, testInfo) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -261,7 +261,7 @@ it.describe('download event', () => {
|
||||
res.end(`Hello world`);
|
||||
});
|
||||
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await page.setContent(`<a download="file.txt" href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
@ -276,7 +276,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it(`should report download path within page.on('download', …) handler for Files`, async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
const onDownloadPath = new Promise<string>(res => {
|
||||
page.on('download', dl => {
|
||||
dl.path().then(res);
|
||||
@ -290,7 +290,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it(`should report download path within page.on('download', …) handler for Blobs`, async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
const onDownloadPath = new Promise<string>(res => {
|
||||
page.on('download', dl => {
|
||||
dl.path().then(res);
|
||||
@ -313,7 +313,7 @@ it.describe('download event', () => {
|
||||
res.end(`Hello world`);
|
||||
});
|
||||
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
@ -327,7 +327,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report new window downloads', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a target=_blank href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -339,7 +339,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should delete file', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -353,7 +353,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should expose stream', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -368,7 +368,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should delete downloads on context destruction', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download1 ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -389,7 +389,7 @@ it.describe('download event', () => {
|
||||
|
||||
it('should delete downloads on browser gone', async ({ server, browserType }) => {
|
||||
const browser = await browserType.launch();
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download1 ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -412,7 +412,7 @@ it.describe('download event', () => {
|
||||
it('should close the context without awaiting the failed download', async ({ browser, server, httpsServer, browserName, headless }, testInfo) => {
|
||||
it.skip(browserName !== 'chromium', 'Only Chromium downloads on alt-click');
|
||||
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await page.setContent(`<a href="${httpsServer.PREFIX}/downloadWithFilename" download="file.txt">click me</a>`);
|
||||
const [download] = await Promise.all([
|
||||
@ -444,7 +444,7 @@ it.describe('download event', () => {
|
||||
res.write(`Hello world`);
|
||||
});
|
||||
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await page.setContent(`<a href="${server.PREFIX}/downloadStall" download="file.txt">click me</a>`);
|
||||
const [download] = await Promise.all([
|
||||
@ -476,7 +476,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
const browser = await browserType.launch();
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/downloadStall">click me</a>`);
|
||||
const [download] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -498,7 +498,7 @@ it.describe('download event', () => {
|
||||
fs.writeFileSync(zipFile, content);
|
||||
server.setRoute('/binary.zip', (req, res) => server.serveFile(req, res, zipFile));
|
||||
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.PREFIX + '/empty.html');
|
||||
await page.setContent(`<a href="${server.PREFIX}/binary.zip" download="binary.zip">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
@ -525,7 +525,7 @@ it.describe('download event', () => {
|
||||
it('should be able to cancel pending downloads', async ({ browser, server, browserName, browserVersion }) => {
|
||||
// The exact upstream change is in b449b5c, which still does not appear in the first few 91.* tags until 91.0.4437.0.
|
||||
it.fixme(browserName === 'chromium' && Number(browserVersion.split('.')[0]) < 91, 'The upstream Browser.cancelDownload command is not available before Chrome 91');
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/downloadWithDelay">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -540,7 +540,7 @@ it.describe('download event', () => {
|
||||
it('should not fail explicitly to cancel a download even if that is already finished', async ({ browser, server, browserName, browserVersion }) => {
|
||||
// The exact upstream change is in b449b5c, which still does not appear in the first few 91.* tags until 91.0.4437.0.
|
||||
it.fixme(browserName === 'chromium' && Number(browserVersion.split('.')[0]) < 91, 'The upstream Browser.cancelDownload command is not available before Chrome 91');
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -556,7 +556,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should report downloads with interception', async ({ browser, server }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.route(/.*/, r => r.continue());
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
@ -570,7 +570,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should emit download event from nested iframes', async ({ server, browser, browserName }, testInfo) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
server.setRoute('/1', (req, res) => {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end(`<iframe src="${server.PREFIX}/2"></iframe>`);
|
||||
@ -600,7 +600,7 @@ it.describe('download event', () => {
|
||||
});
|
||||
|
||||
it('should be able to download a PDF file', async ({ browser, server, asset }) => {
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await page.setContent(`
|
||||
<a href="/empty.pdf" download>download</a>
|
||||
@ -615,7 +615,7 @@ it('should be able to download a PDF file', async ({ browser, server, asset }) =
|
||||
|
||||
it('should be able to download a inline PDF file', async ({ browser, server, asset, browserName }) => {
|
||||
it.fixme(browserName === 'webkit');
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await page.route('**/empty.pdf', async route => {
|
||||
const response = await page.context().request.fetch(route.request());
|
||||
@ -645,7 +645,7 @@ it('should save to user-specified path', async ({ browser, server, mode }, testI
|
||||
res.end(`Hello world`);
|
||||
});
|
||||
|
||||
const page = await browser.newPage({ acceptDownloads: true });
|
||||
const page = await browser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
|
@ -47,7 +47,7 @@ it.describe('downloads path', () => {
|
||||
|
||||
it('should delete downloads when context closes', async ({ browserType, server }, testInfo) => {
|
||||
const downloadsBrowser = await browserType.launch({ downloadsPath: testInfo.outputPath('') });
|
||||
const page = await downloadsBrowser.newPage({ acceptDownloads: true });
|
||||
const page = await downloadsBrowser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -62,7 +62,7 @@ it.describe('downloads path', () => {
|
||||
|
||||
it('should report downloads in downloadsPath folder', async ({ browserType, server }, testInfo) => {
|
||||
const downloadsBrowser = await browserType.launch({ downloadsPath: testInfo.outputPath('') });
|
||||
const page = await downloadsBrowser.newPage({ acceptDownloads: true });
|
||||
const page = await downloadsBrowser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -76,7 +76,7 @@ it.describe('downloads path', () => {
|
||||
|
||||
it('should report downloads in downloadsPath folder with a relative path', async ({ browserType, server }, testInfo) => {
|
||||
const downloadsBrowser = await browserType.launch({ downloadsPath: path.relative(process.cwd(), testInfo.outputPath('')) });
|
||||
const page = await downloadsBrowser.newPage({ acceptDownloads: true });
|
||||
const page = await downloadsBrowser.newPage();
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -89,7 +89,7 @@ it.describe('downloads path', () => {
|
||||
});
|
||||
|
||||
it('should accept downloads in persistent context', async ({ launchPersistent, server }, testInfo) => {
|
||||
const { context, page } = await launchPersistent({ acceptDownloads: true, downloadsPath: testInfo.outputPath('') });
|
||||
const { context, page } = await launchPersistent({ downloadsPath: testInfo.outputPath('') });
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
@ -103,7 +103,7 @@ it.describe('downloads path', () => {
|
||||
});
|
||||
|
||||
it('should delete downloads when persistent context closes', async ({ launchPersistent, server }, testInfo) => {
|
||||
const { context, page } = await launchPersistent({ acceptDownloads: true, downloadsPath: testInfo.outputPath('') });
|
||||
const { context, page } = await launchPersistent({ downloadsPath: testInfo.outputPath('') });
|
||||
await page.setContent(`<a href="${server.PREFIX}/download">download</a>`);
|
||||
const [ download ] = await Promise.all([
|
||||
page.waitForEvent('download'),
|
||||
|
@ -252,9 +252,7 @@ test.describe('cli codegen', () => {
|
||||
const sources = await recorder.waitForOutput('JavaScript', 'waitForEvent');
|
||||
|
||||
expect(sources.get('JavaScript').text).toContain(`
|
||||
const context = await browser.newContext({
|
||||
acceptDownloads: true
|
||||
});`);
|
||||
const context = await browser.newContext();`);
|
||||
expect(sources.get('JavaScript').text).toContain(`
|
||||
// Click text=Download
|
||||
const [download] = await Promise.all([
|
||||
@ -263,8 +261,7 @@ test.describe('cli codegen', () => {
|
||||
]);`);
|
||||
|
||||
expect(sources.get('Java').text).toContain(`
|
||||
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
|
||||
.setAcceptDownloads(true));`);
|
||||
BrowserContext context = browser.newContext();`);
|
||||
expect(sources.get('Java').text).toContain(`
|
||||
// Click text=Download
|
||||
Download download = page.waitForDownload(() -> {
|
||||
@ -272,7 +269,7 @@ test.describe('cli codegen', () => {
|
||||
});`);
|
||||
|
||||
expect(sources.get('Python').text).toContain(`
|
||||
context = browser.new_context(accept_downloads=True)`);
|
||||
context = browser.new_context()`);
|
||||
expect(sources.get('Python').text).toContain(`
|
||||
# Click text=Download
|
||||
with page.expect_download() as download_info:
|
||||
@ -280,7 +277,7 @@ test.describe('cli codegen', () => {
|
||||
download = download_info.value`);
|
||||
|
||||
expect(sources.get('Python Async').text).toContain(`
|
||||
context = await browser.new_context(accept_downloads=True)`);
|
||||
context = await browser.new_context()`);
|
||||
expect(sources.get('Python Async').text).toContain(`
|
||||
# Click text=Download
|
||||
async with page.expect_download() as download_info:
|
||||
@ -288,10 +285,7 @@ test.describe('cli codegen', () => {
|
||||
download = await download_info.value`);
|
||||
|
||||
expect(sources.get('C#').text).toContain(`
|
||||
var context = await browser.NewContextAsync(new BrowserNewContextOptions
|
||||
{
|
||||
AcceptDownloads = true,
|
||||
});`);
|
||||
var context = await browser.NewContextAsync();`);
|
||||
expect(sources.get('C#').text).toContain(`
|
||||
// Click text=Download
|
||||
var download1 = await page.RunAndWaitForDownloadAsync(async () =>
|
||||
|
Loading…
Reference in New Issue
Block a user