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

Как загрузить файл с сайта и положить в нужное место на windows хосте?

java
webdriver
Теги: #<Tag:0x00007f7b6183cc58> #<Tag:0x00007f7b6183cb18>

(Руслан Лизогуб) #1

Предполагается работа на windows хосте, на него и нужно скриптом загрузить файл для дальнейшей обработки. Реализация предполагается на джаве с использыванием внешних библиотек. Сайт htpps, имеет базовую аутентификацию.
Спасибо)


Как кликнуть на кнопку ОК в появившемся окне "Скачать файл"?
(Максим Таран) #2

Ну, если используется протокол https, то без разницы на чём он работает. А что значит загрузить файл? HTTP post? или в какой-то каталог положить?


(Руслан Лизогуб) #3

В каталог. Чтобы понимать откуда его брать для установки.


(Eugene Tkachenko) #4

ну при инициализации например ФФ профайла, вы можете указать, дефолт фолдер всех скачек и указать, что бы небыло окна подтвержения закачки.


(Руслан Лизогуб) #5

А можно ближе к реализации, а то слишком абстрактно как-то)) допустим авторизацию и отключить можно, но остается вопрос закрузки в нужное место.


(Maksim Smolyakov) #6

Как средствами selenium можно скачать файл со страницы?


(Руслан Лизогуб) #7

Огромное спасибо, остался теперь вопрос, как средствами джава и вебдрайвера пройти базовую аутентификацию пользователя.


(Сергей Блохин) #8

Указать логин и пароль в адресе.
https://user:password@example.com/


(Руслан Лизогуб) #9

Уточнил, авторизация проходит через POST, к сожалению через урл не пройдет.


(5am) #10

в теории:
средставами java сделать POST (http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/)
в ответ получить куки
куки скормить вебдрайверу


(Sergey Korol) #11

Не совсем понял ваш workflow. Вы спрашиваете, как скачать файл средствами драйвера… Но как это связано с POST аутентификацией? Скачка файла требует авторизации пользователя, но вы хотите закачать ее в обход UI?

Или задача вообще не связана с драйвером, и вам лишь нужно дернуть соответствующий сервис средствами Java, а затем прочитать байт стрим и записать в файл на диске?

Или вы хотите совместить проход по UI до места закачки (генерация файла на сервере), а затем скачать его средствами Java?

К слову, какая там у вас религия на стороне сервисов - soap или rest? Также следует понимать, нет ли там дополнительного handshake запроса перед непосредственной авторизацией. Вообще говоря, все эти моменты можно уточнить у ваших девелоперов. Наверняка у них уже есть тесты, покрывающие работу с файловым сервисом. Там же и сможете подсмотреть, как реализована аутентификация.


(Руслан Лизогуб) #12

Вопрос решил. Все оказалось достаточно просто, много пробелов в знаниях просто, прилагаю шаблон решения:

public void downloadClientToURL() {

		try {
			URL url = new URL("https://......");

			String loginAndPassword = "login" + ":" + "password";

			String encoding = Base64.getEncoder().encodeToString(
					loginAndPassword.getBytes());

			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setRequestMethod("GET");
			connection.setDoOutput(true);
			connection.setRequestProperty("Authorization", "Basic " + encoding);

			InputStream content = (InputStream) connection.getInputStream();
			File file = new File("d:" + File.separator + "filename.exe");
			OutputStream out = new FileOutputStream(file);
			IOUtils.copy(content, out);
			content.close();
			out.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

Благодарю за подсказки)