Java.Selenide. Ошибка при скачивании файла через FOLDER

Недавно столкнулся с такой проблемой. Скачивал файлы из элемента без href атрибута через FOLDER и все было нормально.
Сейчас при попытке скачать происходит следующий процесс:

  1. Открывается страницы
  2. Находит элемент
  3. Через метод .download(using.FOLDER) происходит скачивание
  4. Скачивает файл ко мне в пк локально, но не в проект

При использовании мода PROXY, файл сохраняет и в проект и локально)

Код

    @Attachment
    @SneakyThrows
    public File getExportFile() {
        File excel = getMenuItems()
                .findBy(Condition.text("Excel"))
                .download(using(FOLDER));
        WebDriverWait wait = new WebDriverWait(getWebDriver(), Duration.ofSeconds(waitingForTests.Timeout));
        wait.until(driver -> excel.exists());
        return excel;
    }

Логи и ошибка вот такая
[main] INFO com.codeborne.selenide.impl.DownloadFileToFolder - Downloaded files in C:\Users\user\IdeaProjects\cxbox-ui-test-selenide\build\downloads\1726473656911_13912_1: []

java.io.FileNotFoundException: Failed to download file in 10000 ms.

Selenide 6.19.1

Прежде всего, упростите свой код.
Выкиньте весь блок с WebDriverWait.
Если метод download вернул объект File, значит, файл уже точно существует. Ничего не надо больше ждать.

Чтобы понять, почему не скачивается, почитайте внимательно весь лог Селенида. Желательно включить режим DEBUG.

@asolntsev
Андрей, привет.

А вот у меня вопрос по поводу:

То есть мы просто вызываем download и по умолчанию если загрузка не стартанула, он ждёт 4 сек. ? И если стартанула, то также не имеет смысла ожидать полной загрузки файла ?

То есть такой код:

File dowloadedFile = $(withText("100kB")).sibling(3).$("a").download(DownloadOptions.using(FileDownloadMode.PROXY));
Assert.assertTrue(dowloadedFile.exists(), "File cant be downloaded !");

отработает верно, при условии, если файл будет весить, скажем, 100Mb и грузиться будет 20 секунд ?

Решение моей проблемы было в настройках браузера. С окном “Ваш пароль раскрыли” помогало, однако блокировало скачивание файла в проект.

Map<String, Object> prefs = new HashMap<>();
        prefs.put("profile.password_manager_enabled", false);
        prefs.put("credentials_enable_service", false);
        options.setExperimentalOption("prefs", prefs);

Вообще-то Селенид сам добавляет эти самые настройки по умолчанию.
Видимо, вы написали свой кастомный код для открытия браузера. Советую его удалить и позволить Селениду самому открывать браузер с нужными настройками. Тогда бы этой проблемы вообще не возникло. :wink:

Почти.
Метод download по умолчанию ждёт файла до 4 секунд.
Если этот файл реально может качаться дольше, стоит прописать и таймаут побольше:

File dowloadedFile = $(withText("100kB")).sibling(3).$("a").download(using(PROXY).withTimeout(ofSeconds(25)));
Assert.assertTrue(dowloadedFile.exists(), "File cant be downloaded !");
1 Like

Супер, спасибо.