Проблема с сохранением файлов при использовании Playwright на JavaScript

Столкнулся с проблемой при попытке сохранить файл, используя Playwright. Кнопка скачивания нажимается, но файл не появляется в указанной папке. Вот пример кода:

test('Проверка загрузки Excel', async ({ page }) => {
  await page.goto('https://example.com/test-page');
  const downloadPromise = page.waitForEvent('download');
  await page.getByRole('button', { name: 'Скачать' }).click();
  const download = await downloadPromise;
  await download.saveAs('C:\\Temp\\test.xlsx');
  
  await page.locator('#uploadInput').setInputFiles('C:\\Temp\\test.xlsx');
})

Кнопка нажимается, но файл не сохраняется. Мой диск защищен BitLocker. Может ли это быть причиной? Вручную я могу скачивать файлы без проблем. Как решить эту проблему?

Попробуй использовать относительный путь вместо абсолютного. Например, ‘./downloads/test.xlsx’. Еще проверь, есть ли у скрипта права на запись в папку. Если проблема в BitLocker, можно временно отключить его для теста. А еще посмотри логи браузера - там может быть инфа о том, почему файл не сохраняется. Удачи с отладкой!

Возможно, проблема в том, что Playwright не успевает завершить скачивание. Попробуй добавить явное ожидание после сохранения файла:

await download.saveAs('C:\\Temp\\test.xlsx');
await page.waitForTimeout(2000); // Подожди 2 секунды

Еще вариант - использовать асинхронную проверку наличия файла:

const fs = require('fs').promises;
await download.saveAs('C:\\Temp\\test.xlsx');
await fs.access('C:\\Temp\\test.xlsx');

Это поможет убедиться, что файл действительно сохранен перед продолжением теста.

хей, у меня тоже была похожая проблема с плейрайтом. попробуй добавить проверку, что файл реально скачался, перед тем как его использовать. вот такой код помог мне:

const fs = require('fs');
await download.saveAs('C:\\Temp\\test.xlsx');
let fileExists = false;
for (let i = 0; i < 10; i++) {
  if (fs.existsSync('C:\\Temp\\test.xlsx')) {
    fileExists = true;
    break;
  }
  await page.waitForTimeout(1000);
}
if (!fileExists) {
  throw new Error('файл не скачался');
}

это подождет до 10 секунд, пока файл не появится. если за это время файл не скачается, тест упадет с ошибкой. может помочь понять, в чем проблема. удачи!