問題
公式に以下のような使用例があるが、
ファイル選択はできるものの、その後の実際にアップロード送信がうまくいかない
// Start waiting for file chooser before clicking. Note no await.
const fileChooserPromise = page.waitForEvent('filechooser');
await page.getByText('Upload file').click();
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles(path.join(__dirname, 'myfile.pdf'));
解決
-
fileChooser.setFiles
の引数としてファイル本体を渡したつもりでも、画面に表示される「ファイル名」の部分しかエミュレートできていなさそうに思えた
以下のように
- fs で ファイルから buffer を得るなどして、ファイル本体としての buffer を作っておく
- 引数として buffer にオブジェクトを渡す
ということで期待通り動いた
import fs from 'fs'
test('UPLOAD SAMPLE', async ({ page }) => {
const fileBuffer = fs.readFileSync('/path/to/example.csv')
await page.getByText('Upload file').click()
const fileChooserPromise = page.waitForEvent('filechooser')
const fileChooser = await fileChooserPromise
await fileChooser.setFiles({
name: 'filename',
mimeType: 'xxx',
buffer: fileBuffer,
})
})
環境
- Nuxt3
- Playwright 1.4
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
プロフィール・経歴