feat(acceptDownload): revert acceptDownload (#10709)

This commit is contained in:
Pavel Feldman 2021-12-06 09:25:24 -08:00 committed by GitHub
parent 518d67add5
commit 7765131a14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 57 additions and 95 deletions

View File

@ -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.

View File

@ -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]>

View File

@ -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]>

View File

@ -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`].

View File

@ -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.

View File

@ -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 };
}

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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;
/**

View File

@ -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'),

View File

@ -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');

View File

@ -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'),

View File

@ -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'),

View File

@ -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 () =>