Найти в Дзене

Java Selenide. Configuration. 3 часть. Сетевые настройки

Очередная статья по теме настроек Selenide, которая затрагивает сетевые настройки. Одна из важных настроек, которая используется при тестировании с помощью Selenide. Включая прокси, мы запускаем браузер через прокси-сервер, что дает нам доступ к запросам и сетевому трафику. Перед тем как работать с прокси необходимо добавить зависимость в свой проект: maven <dependency> <groupId>com.codeborne</groupId> <artifactId>selenide-proxy</artifactId> <version>7.9.3</version> </dependency> gradle implementation("com.codeborne:selenide-proxy:7.9.3") Для демонстрации работы прокси напишем тест, который открывает канал, выполнит поиск и получим доступ к трафику: @Test
@DisplayName("Тест открытия канала через Proxy")
public void testWithProxy() {
Configuration.baseUrl = "https://dzen.ru";
Configuration.proxyEnabled = true;
Configuration.proxyHost = "127.0.0.2";
Configuration.proxyPort = 12345;
Selenide.open("/id/65d7431f1759d9595653fed1");
// Получаем прокси
com.browseru
Оглавление

Очередная статья по теме настроек Selenide, которая затрагивает сетевые настройки.

ProxyEnabled

Одна из важных настроек, которая используется при тестировании с помощью Selenide. Включая прокси, мы запускаем браузер через прокси-сервер, что дает нам доступ к запросам и сетевому трафику.

Перед тем как работать с прокси необходимо добавить зависимость в свой проект:

maven

<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide-proxy</artifactId>
<version>7.9.3</version>
</dependency>

gradle

implementation("com.codeborne:selenide-proxy:7.9.3")

Для демонстрации работы прокси напишем тест, который открывает канал, выполнит поиск и получим доступ к трафику:

@Test
@DisplayName("Тест открытия канала через Proxy")
public void testWithProxy() {
Configuration.
baseUrl = "https://dzen.ru";
Configuration.
proxyEnabled = true;
Configuration.
proxyHost = "127.0.0.2";
Configuration.
proxyPort = 12345;
Selenide.
open("/id/65d7431f1759d9595653fed1");

// Получаем прокси
com.browserup.bup.BrowserUpProxy proxy = WebDriverRunner.
getSelenideProxy().getProxy();

// Говорим что будем отслеживать все (При желании можно выбрать конкретные типы файлов)
proxy.setHarCaptureTypes(CaptureType.
getAllContentCaptureTypes());

// Говорим, что будем запоминать контент запросов и ответов
proxy.enableHarCaptureTypes(CaptureType.
REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

// Отсюда начинается запись трафика
proxy.newHar("MyHar");

Selenide.
$x(".//input[@name='query']").as("Строка запроса").shouldBe(Condition.visible).val("Записки тестировщика");
Selenide.
$x(".//button[@aria-label='Кнопка Найти']").as("Кнопка найти").shouldBe(Condition.visible).click();
Selenide.
$x(".//div[@id='LayoutContentMicroRoot']").as("Контент запроса").shouldBe(Condition.visible);

// Сетевые запросы
List<HarEntry> records = proxy.getHar().getLog().getEntries();

System.
out.println("proxy port: " + proxy.getPort());
System.
out.println(records.size());

Selenide.
closeWebDriver();
}

В итоге видим, что в список "records" попали сетевые запросы

Сетевой трафик
Сетевой трафик

Эта фитча дает возможность почувствовать себя немного хакерменом, не так ли)

-3

ProxyHost и ProxyPort

Позволяет выполнить тонкую настройку сервера прокси

По умолчанию хост определяется как IP машины, на которой выполняются тесты, а порт - "0"

В предыдущем примере можно увидеть данные настройки, и думаю, этой информации на данный момент будет достаточно, лучше вопрос про прокси рассмотреть в другой статье подробнее.

DownloadsFolder

Параметр настройки папки для скачивания файлов. По умолчанию "build/downloads". Тут по моему мнению все понятно: сюда будут скачиваться файлы)

-4

FileDownload

Настройка, которая отвечает за стратегию загрузки файлов.

Существует несколько:

1. С помощью HTTP (по умолчанию) - файл скачивается с помощью HTTP.

Важно понимать, данный метод работает либо по прямой ссылке на скачивание, либо в теге <a href=.../>

Задается следующим образом:

Configuration.fileDownload = FileDownloadMode.HTTPGET;

Для примера я выложил файл на Google Disk(Возможно ссылка будет не валидна, но всегда можно найти в интернете и подменить) и давайте его скачаем:

@Test
@DisplayName("Загрузка файла методом HTTP")
public void downloadFileViaHttp() throws URISyntaxException, IOException {
// Складывать файлы загрузки будем в папку download/http рядом с проектом
Path root = Paths.get("download", "http");
if(!Files.exists(root))
Files.createDirectories(root);

// Настройка папки для скачивания файлов
Configuration.fileDownload = FileDownloadMode.HTTPGET;
Configuration.downloadsFolder = root.toAbsolutePath().toString();
Selenide.open("https://google.com/");
File download = Selenide.download("https://drive.usercontent.google.com/u/0/uc?id=1jd_gIsMtUwHodtL_NoJ-s6h1_gRHKRtl&export=download");
System.out.println(download.getAbsolutePath());
}

После скачивания получим файлик "hello.txt" в папке "download", который в свою очередь в коде запишется в переменную download

Загруженный файл
Загруженный файл

2. В загружаемую папку.

Данная стратегия работает вне зависимости от атрибутов и ссылок, скачивает как есть в папку

Задается следующим образом:

Configuration.fileDownload = FileDownloadMode.FOLDER;

Внесем изменения в предыдущий пример

@Test
@DisplayName("Загрузка файла методом FOLDER")
public void downloadFileViaFolder() throws URISyntaxException, IOException {
// Складывать файлы загрузки будем в папку download/folder рядом с проектом
Path root = Paths.get("download", "folder");
if(!Files.exists(root))
Files.createDirectories(root);

// Настройка папки для скачивания файлов
Configuration.fileDownload = FileDownloadMode.FOLDER;
Configuration.downloadsFolder = root.toAbsolutePath().toString();
Selenide.open("https://google.com/");
File download = Selenide.download("https://drive.usercontent.google.com/u/0/uc?id=1jd_gIsMtUwHodtL_NoJ-s6h1_gRHKRtl&export=download");
System.out.println(download.getAbsolutePath());
}

Результат будет аналогичен - в папке download/folder появился файлик

-6

3. Через CDP (chrome dev tools/Инструменты разработчика chrome).

Итак, этот вариант, судя по расшифровке, работает ТОЛЬКО в Google Chrome. Подробнее об этой технологии рассмотрим в другой статье, а сейчас просто посмотрим как скачивается файл.

Задается следующим образом:

Configuration.fileDownload = FileDownloadMode.CDP;

Снова исправляем настройку в тесте

@Test
@DisplayName("Загрузка файла методом CDP")
public void downloadFileViaCDP() throws URISyntaxException, IOException {
// Складывать файлы загрузки будем в папку download/cdp рядом с проектом
Path root = Paths.get("download", "cdp");
if(!Files.exists(root))
Files.createDirectories(root);

// Настройка папки для скачивания файлов
Configuration.fileDownload = FileDownloadMode.CDP;
Configuration.downloadsFolder = root.toAbsolutePath().toString();
Selenide.open("https://google.com/");
File download = Selenide.download("https://drive.usercontent.google.com/u/0/uc?id=1jd_gIsMtUwHodtL_NoJ-s6h1_gRHKRtl&export=download");
System.out.println(download.getAbsolutePath());
}

И получаем аналогичный результат

4. Через Proxy

Данная стратегия требует, чтобы был включен прокси сервер, соответственно мы увидим сколько запросов прошло, прежде чем получить файл

Трафик
Трафик

Формируем тест

@Test
@DisplayName("Загрузка файла методом Proxy")
public void downloadFileViaProxy() throws URISyntaxException, IOException {
// Складывать файлы загрузки будем в папку download/cdp рядом с проектом
Path root = Paths.get("download", "proxy");
if(!Files.exists(root))
Files.createDirectories(root);

// Настройка папки для скачивания файлов
Configuration.proxyEnabled = true;
Configuration.fileDownload = FileDownloadMode.PROXY;
Configuration.downloadsFolder = root.toAbsolutePath().toString();
Selenide.open("https://google.com/");

// Получаем прокси
com.browserup.bup.BrowserUpProxy proxy = WebDriverRunner.getSelenideProxy().getProxy();

// Говорим что будем отслеживать все (При желании можно выбрать конкретные типы файлов)
proxy.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());

// Говорим, что будем запоминать контент запросов и ответов
proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT, CaptureType.RESPONSE_BINARY_CONTENT);

// Отсюда начинается запись трафика
proxy.newHar("MyFileHar");

File download = Selenide.download("https://drive.usercontent.google.com/u/0/uc?id=1jd_gIsMtUwHodtL_NoJ-s6h1_gRHKRtl&export=download");
// Сетевые запросы
List<HarEntry> records = proxy.getHar().getLog().getEntries();
System.out.println("Количество запросов: " + records.size());
System.out.println(download.getAbsolutePath());
}

В результате получим снова аналогичный результат

-8

Как можно увидеть, как не крути все один результат (вспоминаем мем про человека-паука), однако, разница в методах, которые, в свою очередь, отвечают определенной задаче.

-9

Remote, RemoteConnectionTimeout, RemoteReadTimeout

Так же стоит упомянуть эти три настройки в контексте данной статьи, но раскрою я их позже, когда буду писать о Selenium Grid, а пока проста напишу за что отвечают:

remote - URL удаленного драйвера,

remoteConnectionTimeout - Лимит ожидания соединения с удаленным драйвером (по умолчанию - 10000 мс)

remoteReadTimeout- Лимит ожидания ответа от удаленного драйвера (по умолчанию - 90000 мс)

И я объяснять конечно же не буду)
И я объяснять конечно же не буду)

ps.

Кто это уже знал - красавчики, кто не знал - стали тоже красавчиками) Спасибо, что прочитали) И если не заняты вечными созвонами с тимэйтами, нажмите подписаться)

Ссылка на репозиторий

Selenide Configuration. Часть 1

Selenide Configuration. Часть 2