Доброго времени суток!
selenide.version: 4.6
Вопрос касательно скачивания файлов:
Цель - проверить работает ли скачивание определенного файла на страничке.
Я кликаю по элементу, вызывающий скачивание. Жду 5 секунд и следом ищу файл с этим названием(имя мне известно изначально) в папке скачивания “C://Users//Downloads”. После удаляю его.
Предполагаю, что такой путь очень ненадежный, т.к. выгрузка файла может занять более 5 секунд. Можно ли это реализовать с помощью селенидовского метода “download”?
примерно такую реализацию написал, но она выдает ошибку указанную ниже:
@Когда("^Распечатка приходного кассового ордера: скачиваем документ$")
public void checkDownloadDocument() throws FileNotFoundException, IOException {
File file = someSelenideElement.download();//Падает на этой строке
System.out.println("FILE Path: " + file.getPath());
if(file!=null) { file.delete(); //Test Success }
else Assert.fail("Test Failed");
}
Error: "java.io.FileNotFoundException: build\reports\tests\index.php?seq=7&mod=RQKZPTO&action=report&show=RP&id=1002176 (Синтаксическая ошибка в имени файла, имени папки или метке тома)"
Доброго дня! На самом деле и в первом, и во втором случае я кликаю на один и тот же элемент, который вызывает выгрузку файла. При записи вопроса возникли расхождения.
Возможно, что-то не так с самим элементом и он не содержит в себе что-то нужное?
(И следовательно есть необходимость прописать некие конфигурации?)
Error: "java.io.FileNotFoundException: build\reports\tests\index.php?seq=7&mod=RQKZPTO&action=report&show=RP&id=1002176 (Синтаксическая ошибка в имени файла, имени папки или метке тома)"
Web Element:
<a id="LB_CB_RQKZPTO_report_amp_show_RP_amp_id_1002176" href="?seq=5&mod=RQKZPTO&action=report&show=RP&id=1002176" title="Документ для ФЛ">
<img src="img/ico16_report1.gif" alt="Отчет"> Документ для ФЛ
</a>
Аааа… Вот оно в чём дело…
А когда вы просто скачиваете этот файл в браузере, какое у него получается имя?
Похоже, селенид пытается составить имя файла такое же, как в ссылке - “index.php?seq=7&mod=RQKZPTO&action=report&show=RP&id=1002176”. А это, конечно, невалидное имя файла.
А я могу сам эту ссылку кликнуть? Она есть где-то в публичном доступе?
Если нет, вы можете прислать точный ответ сервера при клике на ссылку - со всеми заголовками? В первую очередь интересует заголовок “Content-Disposition”.
А я решил проверять браузерный chrome://downloads/ вместо папки.
Сразу столкнулся с тем, что Selenide не понимает
open(“chrome://downloads/”);
Будет падать с
http://localhost:8080chrome://downloads/
Если я чего-то не понял, поправьте.
Ок думаю, сделал так:
WebDriver chrome=new ChromeDriver();
chrome.get(“chrome://downloads/”);
В итоге оказалось (ну я не знал), что инстансы браузеров то разные, потому как весь тест на Selenide и только в 1м месте я решил просто вебдрайвер заюзать.
Есть какое-то решение, чтобы Selenide заработал с open(“chrome://downloads/”); ?
update
Сам спросил - сам отвечаю: создал отдельный класс для конфигурации тестов в котором переопределяю baseUrl и прочее:
public class BrowserConfiguration {
public static void setUp(String chooseBrowser, String windowSize, boolean fastInputValue) {
driverManagerEnabled = true;
baseUrl = "";
startMaximized = false;
fastSetValue = fastInputValue;
browser = chooseBrowser;
browserSize = windowSize;
System.out.println("Setup was successful");
}
}
Думаю, это лишнее. В Selenide была исправлена бага, из-за которой он генерировал неправильное имя файла. На последней версии Selenide 4.12.1 простой downloadDocument.download(); должен работать.
Ребят, а CSV кто нить пробовал скачивать с помощью: Selenium.download(url);?
Было анаонсировано что можно с помощю XLS:
XLS document = new XLS(getClass().getClassLoader().getResource(name));
assertThat(document, containsText(“Some String”));