вопрос по использованию Selenide Download

downloadfile
download
java
selenide
Теги: #<Tag:0x00007fedc0ff7bb0> #<Tag:0x00007fedc0ff78b8> #<Tag:0x00007fedc0ff75e8> #<Tag:0x00007fedc0ff7188>

(Ayat Rakhishev) #1

Доброго времени суток!
selenide.version: 4.6
Вопрос касательно скачивания файлов:

Цель - проверить работает ли скачивание определенного файла на страничке.
Я кликаю по элементу, вызывающий скачивание. Жду 5 секунд и следом ищу файл с этим названием(имя мне известно изначально) в папке скачивания “C://Users//Downloads”. После удаляю его.

Работающий код:

@Когда("^Распечатка приходного кассового ордера: скачиваем документ$") 
public void checkDownloadDocument() throws FileNotFoundException, IOException{
    	downloadDocument.click();
    	Thread.sleep(3000);		
    	
    	Assert.assertTrue(isFileDownloaded(folderDirectory, fileName));		
		try{
			File file = new File(folderDirectory + "//" + fileName);
			file.delete();
		} catch(Exception e){ Assert.fail("Some Error Occured while deleting file: " + e.toString()); }   		   	
 }

Предполагаю, что такой путь очень ненадежный, т.к. выгрузка файла может занять более 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 (Синтаксическая ошибка в имени файла, имени папки или метке тома)"

Подскажите, пожалуйста.


(asolntsev) #2

Привет!

Ваш вариант почти корректный, только вместо someSelenideElement.download(); напишите downloadDocument.download();


(Ayat Rakhishev) #3

Доброго дня! На самом деле и в первом, и во втором случае я кликаю на один и тот же элемент, который вызывает выгрузку файла. При записи вопроса возникли расхождения.

Возможно, что-то не так с самим элементом и он не содержит в себе что-то нужное?
(И следовательно есть необходимость прописать некие конфигурации?)

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&amp;mod=RQKZPTO&amp;action=report&amp;show=RP&amp;id=1002176" title="Документ для ФЛ">
      <img src="img/ico16_report1.gif" alt="Отчет">  Документ для ФЛ
</a>

(asolntsev) #5

Аааа… Вот оно в чём дело…
А когда вы просто скачиваете этот файл в браузере, какое у него получается имя?

Похоже, селенид пытается составить имя файла такое же, как в ссылке - “index.php?seq=7&mod=RQKZPTO&action=report&show=RP&id=1002176”. А это, конечно, невалидное имя файла.


(Ayat Rakhishev) #6

В случае скачивания с помощью клика, файл загружается с именем “Приходный кассовый ордер - физ.лицо.rtfobs”


(Lev Yarushin) #8

А почему бы не подождать появления файла в папке?
Вы же имя знаете, значит можно просто сделать циклическую проверку наличия этого файла с таймаутом…


(asolntsev) #9

А я могу сам эту ссылку кликнуть? Она есть где-то в публичном доступе?

Если нет, вы можете прислать точный ответ сервера при клике на ссылку - со всеми заголовками? В первую очередь интересует заголовок “Content-Disposition”.


(Gordon Freeman) #10

А я решил проверять браузерный 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");
    }
}

(asolntsev) #11

Думаю, это лишнее. В Selenide была исправлена бага, из-за которой он генерировал неправильное имя файла. На последней версии Selenide 4.12.1 простой downloadDocument.download(); должен работать.