0

[Playwright Interview question #19]: Làm thế nào để test upload/download file?

Câu hỏi phỏng vấn #19: Làm thế nào để test upload/download file?

Trả lời mẫu:

1. File upload:

// Method 1: Direct input
await page.locator('input[type="file"]').setInputFiles('path/to/file.pdf');

// Method 2: Multiple files
await page.locator('input[type="file"]').setInputFiles([
  'file1.png',
  'file2.jpg'
]);

// Method 3: File chooser
const [fileChooser] = await Promise.all([
  page.waitForEvent('filechooser'),
  page.click('#upload-btn')
]);
await fileChooser.setFiles('document.pdf');

2. File download:

// Wait for download
const [download] = await Promise.all([
  page.waitForEvent('download'),
  page.click('#download-btn')
]);

// Save to specific path
await download.saveAs('downloads/file.pdf');

// Get download info
console.log(download.suggestedFilename());
console.log(download.url());

3. Download với custom path:

const context = await browser.newContext({
  acceptDownloads: true,
  downloadsPath: './test-downloads'
});

4. Verify file content:

// Read downloaded file
const download = await page.waitForEvent('download');
const path = await download.path();
const content = await fs.readFile(path, 'utf-8');
expect(content).toContain('expected text');

5. Buffer/stream handling:

// Create download stream
const download = await page.waitForEvent('download');
const stream = await download.createReadStream();
// Process stream...

💡Tips:

  • Clear input trước khi upload: setInputFiles([])
  • Test drag-and-drop upload với page.dragAndDrop()
  • Verify upload progress nếu có progress bar
  • Cleanup downloaded files sau test

Lời Kết

Playwright đang trở thành một trong những automation frameworks phổ biến nhất cho web testing. Thông qua series này, hy vọng bạn sẽ:

  • Nắm vững kiến thức từ cơ bản đến nâng cao
  • Tự tin trong các buổi phỏng vấn
  • Áp dụng hiệu quả vào dự án thực tế
  • Trở thành một phần của cộng đồng Playwright Việt Nam năng động

📚 Bắt đầu hành trình của bạn với: Bài 1: Playwright vs Selenium

💬 Có câu hỏi? Tham gia group Facebook của chúng mình!

Theo dõi series để không bỏ lỡ bài viết mới!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.