Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Загрузка файла используя phantomJS в связке с codeception.

codeception
phantomjs
downloadfile
Теги: #<Tag:0x00007f7b70b13b70> #<Tag:0x00007f7b70b139e0> #<Tag:0x00007f7b70b13878>

(Ugin Berets) #1

В тестируемом интернет магазине есть загружаемые продукты. Мне нужно как нибудь проверить что при клике на ссылку начинается загрузка файла. Можно конечно пойти методом исключений и проверить негативный сценарий, т.е. проверить что после клика нет страницы 404 и т.д. Но хотелось бы проверить позитивный сценарий. Есть у кого нибудь предложения или может кто-то уже с этим сталкивался?


(dirzhov) #2

можете сниффером трафик мониторить, но это извращение) тут нужно определиться с “как-нибудь проверить” и “начинается загрузка файла”) загрузка с сервера или на сервер? если с сервера, то как вариант, проверять наличие файла в папке куда сохраняется и дополнительно размер файла, чтоб наверняка. Если файла не будет, то однозначно трабла. Если размер файла не совпадает с ожидаемым - тоже трабла. В другом случае всё скачалось… А чтоб совсем наверняка, можно еще и хэш посчитать и сравнить…


(Ugin Berets) #3

Тогда появляется новый вопрос: куда сохраняет скаченные файлы phantomjs, и скачивает ли он их вообще, т.к. по поиску я этот файл найти не могу.


(Yury) #4

Проверить текущую директорию можно методом workingDirectory
Поменять - changeWorkingDirectory

Тут подробнее: http://phantomjs.org/api/fs/method/change-working-directory.html


(Ugin Berets) #5

Я так понял, что workingDirectory показывает директорию откуда запущен phantomjs. Но там тоже скачанного файла нет.
Возможно, после клика на ссылку надо ещё подтвердить скачивание на попапе (как и на обычных браузерах) ?
Пробовал

$I->executeJS(“window.confirm = function(msg){return true;};”);
$I->executeJS(“window.alert = function(msg){return true;};”);

но безрезультатно, файла всё равно нигде нет((


(Yury) #6

Может не скачивается?
Вообще у фантома раньше были траблы с этим - https://github.com/ariya/phantomjs/issues/10052
Как сейчас не знаю, давно им не пользовался.


(dirzhov) #7

да, таки просто кликом не скачивает… вот тут какой-то костыль придумали https://github.com/ankitgr8/phantomjs2.0 , но полагаю - это не то, что нужно автору… так что в фантоме не получится скачать файл как в хроме или мозиле…


(Ugin Berets) #8

Пробую покопать в другую сторону: отправлять HEAD запрос и смотреть что приходит в ответ.
Если отправить запрос вручную через панель разработчиков в FF, то в ответе приходит имя загружаемого файла.
Теперь пытаюсь сделать это в авто-тесте:

$I->executeJS(“window.RESPONSE = $.ajax({type : ‘HEAD’, url : ‘http://***********’})”);

Но на этой строке тест падает.


(Ugin Berets) #9

Изменил код запроса:

$I->executeJS(“new Ajax.Request(‘https://************’, {
method:‘head’,
onSuccess: function(transport) {
window.IS_FILE_AVAILABLE = transport.status == 200 && transport.getResponseHeader(‘Content-Disposition’);
window.FILE = transport.getResponseHeader(‘Content-Disposition’);
}
});”);

Теперь если файл существует, то в переменной window.FILE содержится название файла.