-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Description
Version
@cloudflare/[email protected]
Steps to reproduce
Steps
- Run
wrangler dev - Send any http request to the dev server (e.g.
curl localhost:8787)
Files
src/index.ts
// Cloudflare Browser Rendering via Workers with Playwright
// https://developers.cloudflare.com/browser-rendering/platform/playwright/
import fs from 'node:fs';
import { launch } from '@cloudflare/playwright';
export default {
async fetch(request: Request, env: Env) {
function ls(path: string) {
console.log(`ls ${path}\n`, fs.readdirSync(path));
}
const browser = await launch(env.MYBROWSER);
console.log('Opened browser');
ls('/tmp');
ls('/tmp/playwright-artifacts-0');
const page = await browser.newPage();
await page.goto('https://sample-files.com/data/csv/');
console.log('Navigated to sample-files.com/data/csv/');
// listen for all download events
page.on('download', async (download) => {
console.log('Download event detected: ', download.suggestedFilename());
// log save path
const path = await download.path();
console.log('Download path: ', path);
// save to /tmp with suggested filename
// const filePath = `/tmp/${download.suggestedFilename()}`;
// console.log('Download event detected: ', download.suggestedFilename());
// await download.saveAs(filePath);
// console.log(`Download saved to ${filePath}`);
});
console.log('starting to click download buttons...');
await page.getByRole('link', { name: 'Download Basic Data Set' }).click();
// await page.getByRole('link', { name: 'Download Mixed Data Types' }).click();
// await page.getByRole('link', { name: 'Download International Characters' }).click();
const wait = 5;
console.log(`waiting ${wait} seconds for downloads to complete...`);
await new Promise((resolve) => setTimeout(resolve, wait * 1000));
ls('/tmp');
ls('/tmp/playwright-artifacts-0');
return null;
},
};wrangler.jsonc
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "workers-browser",
"main": "src/index.ts",
"compatibility_date": "2025-11-01",
"workers_dev": true,
"observability": {
"enabled": true
},
"compatibility_flags": ["nodejs_compat"],
"upload_source_maps": true,
"browser": {
"binding": "MYBROWSER",
"remote": true
}
}
package.json
{
"name": "workers-browser",
"version": "0.0.0",
"private": true,
"scripts": {
"deploy": "wrangler deploy",
"dev": "wrangler dev",
"start": "wrangler dev",
"test": "vitest",
"cf-typegen": "wrangler types"
},
"devDependencies": {
"@cloudflare/playwright": "^1.0.0",
"@cloudflare/vitest-pool-workers": "^0.10.4",
"@types/node": "^24.10.0",
"typescript": "^5.9.3",
"vitest": "~3.2",
"wrangler": "^4.45.4"
}
}Expected behavior
Opened browser
ls /tmp
[ 'playwright-artifacts-0' ]
ls /tmp/playwright-artifacts-0
[]
Navigated to sample-files.com/data/csv/
starting to click download buttons...
Download event detected: basic-data.csv
Download path: /tmp/playwright-artifacts-0/7f8a0c3c-ccbc-4aa3-9457-43529213a5aa
waiting 5 seconds for downloads to complete...
ls /tmp
[ 'playwright-artifacts-0' ]
ls /tmp/playwright-artifacts-0
[ '7f8a0c3c-ccbc-4aa3-9457-43529213a5aa' ]
The file should exist under the path
Actual behavior
Opened browser
ls /tmp
[ 'playwright-artifacts-0' ]
ls /tmp/playwright-artifacts-0
[]
Navigated to sample-files.com/data/csv/
starting to click download buttons...
Download event detected: basic-data.csv
Download path: /tmp/playwright-artifacts-0/7f8a0c3c-ccbc-4aa3-9457-43529213a5aa
waiting 5 seconds for downloads to complete...
ls /tmp
[ 'playwright-artifacts-0' ]
ls /tmp/playwright-artifacts-0
[]
There are no files under the path
Additional context
download.path()- returns a path but can't find the file (maybe it's only in the browser worker?)download.createReadStream()- returns empty streamdownload.suggestedFilename()- returns correct suggested filename
I have a sense that this is because the browser worker is isolated from the main worker. But I couldn't find documentation on this edge case (whether it's supported or not currently)
Environment
System:
OS: macOS 15.6
CPU: (8) arm64 Apple M2
Memory: 104.67 MB / 24.00 GB
Binaries:
Node: 22.17.0
npm: 10.9.2
pnpm: 10.20.0
IDEs:
VSCode: 1.105.1 - /opt/homebrew/bin/code
Languages:
Bash: 3.2.57 - /bin/bashMetadata
Metadata
Assignees
Labels
No labels