Как проверить скачивание нескольких файлов selenide
Как убедиться, что файл загружен успешно или нет в Selenium?
Я использую Chrome. При нажатии на кнопку происходит загрузка файла в папку «Загрузки» (без всплывающего окна загрузки, в противном случае я также могу попробовать с помощью инструмента AutoIT). Теперь мне нужно убедиться, что файл загружен успешно или нет. Позже мне нужно проверить содержимое этого файла. Содержимое файла должно соответствовать тому, что отображается в графическом интерфейсе.
2 ответа
Следующая строка кода возвращает истину или ложь, если файл program.txt существует:
Вы можете использовать это внутри настраиваемого ожидаемого условия: ##, чтобы дождаться загрузки файла и его представления
Определить метод внутри любого класса pageobject
Мы создали специальный метод ожидаемого условия, теперь используем его как:
И в тестовом коде подождите, например:
Вывод:
Ошибка:
Пройдено

Вы должны указать в этом методе имя файла, который вы хотите проверить (загружено или нет), и путь, по которому должна произойти загрузка. Чтобы найти путь загрузки, вы можете использовать:
How to check downloaded files Selenium WebDriver?
I wrote an automation test in Selenium webdriver using C#, and one of steps requires to download a XLSX file from server. How to validate if file has downloaded successfully and get his name?
2 Answers 2
I found the solution with following source code:
In the below code, i have taken the list of excel files in the download folder. If you have only one file then use file.name property or if you have multiple files try the below code.
-
The Overflow Blog
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.12.9.43105
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Validate Downloaded file after clicking on downloaded button/ link
It is very important to verify if the file is downloaded successful or not. Most of the cases we just concentrate on clicking the downloaded button. But at the same time it is also very important to confirm that file is downloaded successfully without any errors or if some other file is getting downloaded.
In most of the cases we know which file is getting downloaded after clicking on download button / link. Now when we know the file name, we can verify using java for the ‘File Exists’ in a downloaded folder location which we specify.
Even there are cases where file name is not unique. File name may be generated dynamically. In such cases we can also check for the file exists with the file extension.
We will see all the above cases and verify for the file which is being downloaded. We will see examples using Java File IO and WatchService API
Here we are defining the preferences to the Firefox browser and we will pass this to the Webdriver. We can set different preferences based on the requirement. In this tutorial there are many other preferences which are used when downloading a file using Firefox Preferences.
Below method takes the download directory and the file name, which will check for the file name mention in the directory and will return ‘True’ if the document is available in the folder else ‘false’. When we are sure of the file name, we can make use of this method to verify.
The below method takes two parameters, first takes the folder path and the file extension / mime type. it will return true if the file with the specific extension is available in the specified folder.
The below method is used to get the document name based on the last action performed in the specified folder. This is done by using java LastModified which returns a long value representing the time the file was last modified.
When ever we click on download, based on the file size and network we need to wait for specific to complete download operation. If not we may encounter issues as the file is not downloaded.
We can also make use of ‘Java Watch Service API’ which monitors the changes in the directory. Note: This is compatible with Java 7 version. Below is the example program using Watch Service API. And here we will user only for ‘ENTRY_CREATE’ event.
Селенид поддерживает Украину
На дворе декабрь, и в сегодняшнем посте рождественского календаря Selenide мы поговорим о том, какие возможности для скачивания файлов есть в Selenide.
Как я могу скачать файл в моём тесте?
В какой-то момент нашей карьеры каждый из нас сталкивается с необходимость скачать какой-то файл в тесте.
Как мы помним, в Selenium это было непросто, потому что для разных браузеров требуются разные настройки.
Например, вот так выглядит создание профиля Firefox с нужными настройками:
А в Selenide
проблема решается гораздо проще — методом $.download() .
Чтобы скачать файл, в Selenide достаточно просто вызвать метод:
и Selenide автоматически сделает всё, что надо. Вам не придётся возиться со всплывающим окошком, которое спрашивает, куда сохранить файл, и потом закрывать его.
Selenide сохранит скачанный файл в папку build/reports/tests . Это та же папка, где Gradle генерирует результаты прогона тестов, так что их как раз удобно видеть вместе.
Конечно, поменять эту папку тоже можно:
Таким образом можно скачивать файлы только со ссылкой с атрибутом “href”.
Но что, если у меня ссылки с атрибутом “href”? Так бывает, например, когда файл скачивается в результате сабмита формы. В этом случае можно скачивать файлы с помощью встроенного в селенид прокси-сервера.
Для начала нам нужно включить его (т.к. он по умолчанию выключен):
После этого мы снова можем вызывать метод $.download() , но теперь он стал более могущественным и не требует наличия атрибута “href”:
Хозяйке на заметку:
Не забудьте увеличить таймаут, если собираетесь скачивать файл большого размера.
Файл будет скачан в папку по умолчанию (что-то типа C:\downloads and settings\downloads ).
Таким образом, скачанный файл окажется в двух местах: c:\downloads. и build/reports/tests .
Если это для вас проблема, можете в конце теста удалить ненужную папку, чтобы очистить место на диске:
How to check downloaded files Selenium WebDriver?
I wrote an automation test in Selenium webdriver using C#, and one of steps requires to download a XLSX file from server. How to validate if file has downloaded successfully and get his name?
2 Answers 2
I found the solution with following source code:
![]()
In the below code, i have taken the list of excel files in the download folder. If you have only one file then use file.name property or if you have multiple files try the below code.
![]()
-
The Overflow Blog
Linked
Related
Most asked in [selenium]
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.13.43305
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Как проверить скачивание нескольких файлов selenide
Селенид поддерживает Украину
На дворе декабрь, и в сегодняшнем посте рождественского календаря Selenide мы поговорим о том, какие возможности для скачивания файлов есть в Selenide.
Как я могу скачать файл в моём тесте?
В какой-то момент нашей карьеры каждый из нас сталкивается с необходимость скачать какой-то файл в тесте.
Как мы помним, в Selenium это было непросто, потому что для разных браузеров требуются разные настройки.
Например, вот так выглядит создание профиля Firefox с нужными настройками:
А в Selenide
проблема решается гораздо проще — методом $.download() .
Чтобы скачать файл, в Selenide достаточно просто вызвать метод:
и Selenide автоматически сделает всё, что надо. Вам не придётся возиться со всплывающим окошком, которое спрашивает, куда сохранить файл, и потом закрывать его.
Selenide сохранит скачанный файл в папку build/reports/tests . Это та же папка, где Gradle генерирует результаты прогона тестов, так что их как раз удобно видеть вместе.
Конечно, поменять эту папку тоже можно:
Таким образом можно скачивать файлы только со ссылкой с атрибутом “href”.
Но что, если у меня ссылки с атрибутом “href”? Так бывает, например, когда файл скачивается в результате сабмита формы. В этом случае можно скачивать файлы с помощью встроенного в селенид прокси-сервера.
Для начала нам нужно включить его (т.к. он по умолчанию выключен):
После этого мы снова можем вызывать метод $.download() , но теперь он стал более могущественным и не требует наличия атрибута “href”:
Хозяйке на заметку:
Не забудьте увеличить таймаут, если собираетесь скачивать файл большого размера.
Файл будет скачан в папку по умолчанию (что-то типа C:\downloads and settings\downloads ).
Таким образом, скачанный файл окажется в двух местах: c:\downloads. и build/reports/tests .
Если это для вас проблема, можете в конце теста удалить ненужную папку, чтобы очистить место на диске:
Эффективные тесты пользовательского интерфейса с Selenide
Рождество – время чудес. В канун нового года мы все строим планы на следующий. И мы надеемся, что все проблемы уйдут в конце года, и в будущем году произойдет чудо.
Каждый Java-разработчик мечтает о чуде, которое позволит ему стать самым эффективным Java-разработчиком в мире.
Я хочу показать вам такое чудо.
Это называется автоматизированные тесты !
Тьфу, тесты?
Да. Вы не станете настоящим мастером благодаря услугам micro / pico / nano. Вы станете настоящим мастером благодаря дисциплине. Дисциплина утверждает, что разработчик только тогда сообщает о выполненных работах, когда код и тесты написаны и выполнены.
Но разве тестирование не скучно?
О нет, поверь мне! Написание быстрых и стабильных автоматических тестов – сложная задача для самых умных руководителей. И это может быть очень весело и интересно. Вам нужно только использовать правильные инструменты.
Правильный инструмент для написания тестов пользовательского интерфейса:
селенида
Selenide – это библиотека с открытым исходным кодом для написания кратких и стабильных тестов пользовательского интерфейса.
Selenide – идеальный выбор для разработчиков программного обеспечения, потому что у него очень низкая кривая обучения. Таким образом, вам не нужно беспокоиться о деталях браузера, обо всех этих типичных проблемах Ajax и времени, которые поглощают большую часть времени инженеров QA.
Единственно верный способ загружать и скачивать файлы в Selenium тестах

Selenium WebDriver создавался как кросс-платформенный инструмент для управления веб браузерами. И вот уже почти 14 лет он делает эту работу очень и очень хорошо. Впрочем, автотесты из реального мира создают ситуации, в которых Selenium бессилен. Например, по сценарию нужно загрузить или скачать какой-либо файл. После нажатия кнопки "Загрузить" или "Скачать", поверх окна браузера появляется окно файлового менеджера операционной системы к которому Selenium уже не имеет доступа. Тест останавливается.
- Такое решение не кросс-платформенное. Приходится изобретать свой велосипед для каждой новой операционной системы.
- Хрупкое. Нет гарантии, что скрипт будет работать корректно если на машине открыто несколько браузеров.
- Это делает невозможным использование headless режима браузера
Меня зовут Ярослав Пернеровский. Я уже 15 лет в тестировании и около 8 лет в автоматизации. Сейчас я расскажу как нужно правильно обрабатывать такие ситуации.
Все сложности с окнами операционной системы решаются довольно прямолинейно — надо сделать так, чтобы эти окна не появлялись и не мешали работе браузера.
Загрузка файла на сервер
В этом случае все просто, даже банально. Чтобы проблема не возникала — не нужно нажимать на кнопку "Загрузить". Вместо этого лучше поискать на странице элемент, который является файловым полем ввода (специальный input с типом file ) и с помощью метода sendKeys() "напечатать" в него абсолютный путь к нужному файлу:
Это все. Дальше Selenium все сделает за вас. В любой операционной системе. В любом режиме браузера. После выполнения этого метода, сразу же, без лишних вопросов, начнется загрузка файла.
Что, если загрузка не началась? Возможно, вы пишите не в то поле, так как в DOM дереве присутствует несколько полей нужного типа. Это легко проверить в консоли браузера командой $$("input[type=file]")

Надо помнить, что метод findElement() возвращает самый первый элемент из найденных. Это не всегда может быть то что нужно. Следует более точно специфицировать локатор, чтобы он указывал на правильное поле. Тут надо поэкспериментировать, но в результате все заработает как надо.

В угоду красивому дизайну, разработчики часто делают файловое поле скрытым. В таких случаях, Selenium ругается на то, что не может работать с невидимым элементом. Довольно прямолинейное решение — надо сделать поле видимым. Об этом хорошо написал Алексей Баранцев (barancev) в своем блоге. После таких манипуляций, никаких проблем с загрузкой быть не должно.
Скачивание файла с сервера
Если с загрузкой все абсолютно понятно, то скачивание файла уже не так однозначно. Современные браузеры по-умолчанию не спрашивают куда сохранять файл, а просто сохраняют в системную папку Downloads, а так как Selenium запускает браузеры с чистыми настройками и изолированными профилями (кроме Internet Explorer), то простое нажатие на "Скачать" начнет скачивание файла без открытия окна проводника.
Хотя, даже в таком случае, бывают внезапные уточняющие диалоги уже от самого браузера:

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

Как видно, кнопка реализована в виде ссылки. Атрибут href содержит путь к нужному файлу на сервере. Это идеальный вариант, так как все что нужно, это вытащить ссылку и скачать файл с помощью любого http клиента. Например для Java это выглядит следующим образом:
Конечно, для корректной загрузки через http, надо написать чуть более сложный код. Ведь нужно передавать http заголовки и куки текущей сессии браузера, обрабатывать ошибки и прочее. Полный код реализации такого механизма можно подсмотреть в исходниках библиотеки Selenide. Нужный класс называется DownloadFileWithHttpRequest.
К сожалению, не всегда бывает так просто. Случается, что ссылка для скачивания генерируется с помощью JavaScript и ее сложно получить в чистом виде. Тогда, без нажатия на кнопку уже не обойтись. Хорошая новость в том, что окошки операционной системы открываются не после нажатия на кнопку, а уже когда браузер получает серверный ответ, в котором содержится информация для сохранения на диск. Все что нам нужно сделать, это перехватить этот ответ и подменить метод сохранения из браузера на свой. Звучит просто, но на деле это требует установки прокси-сервера между браузером и настоящим бекендом. К счастью, существуют специальные прокси, которые прекрасно работают в связке с Selenium. Например современный BrowserUpProxy или классический BrowserMobProxy.
Реализация этого метода довольно громоздкая, но работающий пример можно найти в уже знакомом проекте Selenide. За это отвечает класс DownloadFileWithProxyServer.
В целом, этот способ самый надежный, но и он не лишен недостатков. Установленный прокси нарушает работу https, а это может повлиять на поведение тестируемого приложения.
В общем случае, надо хорошо подумать, что именно тестируется и действительно ли для этого нужно скачивать файлы. Если можно обойтись без скачивания, то лучше обойтись. Если нет — выбирайте самый простой способ из вышеописанных.
Заключение
Чтобы тесты оставались стабильными, надо убирать факторы, которые делают их хрупкими. Диалоговые окна операционной системы, это один из таких факторов. В следующих статьях я планирую раскрыть другие важные аспекты, которые сильно влияют на стабильную работу Selenium тестов. Слушайте подкаст QA Guild и хорошей вам автоматизации.
Русские Блоги
Введение: селенид — это пакет селена, использующий более простой способ написания, без учета времени ожидания элемента.
Преимущества:
- Встроенное неявное ожидание
- Автоматически закрывать браузер после запуска варианта использования
- Код прост и удобен для чтения
- Автоматически делать скриншоты неудачных дел
- Поскольку это инкапсуляция селена, его можно использовать с селеном.
установка
Проект maven может добавлять следующие зависимости в pom.xml
Позиционирование элемента
selenide использует символ «$» для поиска элемента (import static com.codeborne.selenide.Selenide. *;), используя IDEA для написания кода, пока
Введите $ (by, чтобы найти нужный нам метод с помощью подсказки кода, как показано ниже: 
- $(String cssSelector) -По умолчанию параметр символа $ — "CSS", возвратSelenideElementОбъект класса SelenideElement наследует WebElement, который представляет первый элемент, найденный селектором CSS на странице.
- $(By) -Возврат "first SelenideElement" по локатору классов.
- $(byText(“Sign in”)) -С помощью позиционирования текста, если вы используете селен, вы можете использовать только небольшой путь к записи, например, driver.findElementByXpath ("// * [text () =‘ Sign in ’]").
- $(byXpath("//*[text()=‘Sign in’]")) -Найти через Xpath
- $ (byAttribute ("заполнитель", "идентификатор свойства")) -Найти по атрибуту
- $$("#search-results a").findBy(text(“selenide.org”)) Вторичный поиск
Элемент операция
Селенид действует на элементы следующим образом:
Метод получения статуса элемента и значения атрибута
- $(byText(“Sign in”)).click() -Нажмите
- $(byName(“password”)).setValue(“qwerty”) -Ввод текста
- $(byName(“password”)).setValue(“qwerty”).pressEnter() -Нажмите Enter после ввода текста
- $(By.xpath(element)).exists() -Определите, существует ли элемент
- executeJavaScript(String jsCode,Object … arguments) Выполнить js-код
Позиционирование коллекции элементов
Найдите группу элементов с помощью «$$», как показано ниже:
- $$("#search-results a") возвращениеElementsCollectionТип коллекции элементов
Операции над коллекциями элементов
Работа в браузере
- Откройте браузер (если он еще не открыт) и загрузите URL
- Переключить окно браузера
- Обновить
- Ожидание потока
- Предупреждение о действии
утверждение
selenide утверждает через should, что эквивалентно Assert.
Примеры:
- $(“input”).should(exist) -Проверьте, что элемент должен существовать
- $(“input”).shouldBe(visible) -Validation element должен быть видимым
- $(“input”).shouldHave(exactText(“Some text”)) -Проверьте, что текст элемента равен Some text
- $(“input”).shouldHave(value(“John”)) -Проверьте, что значение атрибута элемента равно John ""
- $(“#input”).shouldHave(id(“myForm”)) -Проверьте, что атрибут id элемента равен «myForm»
- $ ("# btn-Search"). shouldHave (текст ("Поиск")) -Убедитесь, что элемент содержит текст «поиск»
- $ ("# btn-Search"). shouldNotHave (текст ("Поиск")) -Убедитесь, что элемент не содержит "поискового" текста
Вы также можете использовать утверждения для ожидания отображения, выполняется ли состояние ожидания (видимый, активный, текст («некоторый текст»)) до тех пор, пока время ожидания не достигнет значения (значение по умолчанию — 4000 миллисекунд), например:
Name already in use
selenide / statics / src / test / java / integration / FileDownloadToFolderTest.java /
- Go to file T
- Go to line L
- Go to definition R
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters