Здравствуйте!
Подскажите пожалуйста, кто знает, решение такой задачи.
Надо тестировать веб-приложение. Чтобы тестировать вручную, надо использовать modheader. Это расширение меняет заголовки, т.е. устанавливает приходящие из приложения при вызове приложения. И, после установки заголовков, приложение в браузере нормально открывается.
Если делать автоматизированное тестирование, то, при создании нового браузера, разумеется никакого расширения нет. Поэтому получается ошибка и приложение не открывается.
Название и значение заголовков мне известны.
Как их можно применить в тестах, чтобы приложение в браузере нормально открывалось?
А что за заголовки? Почему оно не работает просто в браузере?)
Заголовки от приложения использующего СУДИР. В браузере приложение с установленным расширением modheader работает прекрасно. Но, когда я создаю браузер в процессе исполнения теста, создаю на хромдрайвере, расширения в таком браузере нет. Поэтому вызов приложения по адресу приводит к ошибке. Браузер не содержит заголовков. Ведь заголовки присылаются именно в браузер, не так ли? Ведь именно в браузер надо устанавливать расширение.
Так а заголовки какие именно?
Браузер отправляет серверу HTTP запрос, сервер отправляет ответ. И в запросе, и в ответе могут быть разные заголовки.
An overview of HTTP - HTTP | MDN
У меня в связи с этими заголовками пока проблема просто зайти в приложение. Мой тест просто делает getUrl(адрес_приложения) и появляется ошибка. Если адрес_приложения вставить в поле ввода стандартного браузера, у которого есть расширение, то приложение спокойно открывается. Разумеется, у расширения нет заголовков и их значений. Значит, оно их получает после перехода по ссылке на приложение. Соответственно, расширение их применяет к браузеру. Вот эту всю деятельность мне надо осуществить в браузере, который создаётся хромдрайвером, в котором нет нужного расширения. Вот, спрашиваю, может знает кто? Нет в гугле такой информации почему-то… Тема наверное очень специфическая.
modheader это расширение для редактирования запросов и ответов (видимо до того, как браузер начнет их обрабатывать) под свои нужды. Типа когда сервер присылает одно значение заголовка, а хочется посмотреть как себя будет вести скрипт при другом значении.
https://modheader.com/
Если просто установить его и ничего не настроить, то вряд ли что-то изменится.
Дело в том, что мне никак его не установить в создаваемом браузере во время теста. И не настроить. Мне нужно разработать алгоритм, заменяющий всю эту деятельность расширения. И установку расширения, и настройку. Хардкором всю эту деятельность. И вот, я не знаю как, и в сети не найти…
В селениуме вроде была функция для установки расширения, но настроить наверно не так просто. Еще скорее всего можно просто указать путь папки профиля с установленным и настроеным расширением.
Но для начала лучше узнать как оно настроено-то, может это и без расширения легко делается )
Тут всё очень не просто. Система сберовская. Расширение устанавливать не надо через селениум. Потому что расширение расширению рознь, а как заполнять поля расширения modheader селениум не знает. Там поле название и поле значение. Они сберовские, т.е. не в них суть. Суть в том, что при запросе “перейти по ссылке” отправляется и эта пара ключ-значение, этот хедер. И вот именно эту деятельность надо как-то воспроизвести в коде селениума. А как - не пойму.
дык я ж и говорю, надо для начала понять что вообще сделать надо.
Например, посмотреть как расширение настроено. Или документацию по системе если есть.
Так а ключ какой именно?
И значение откуда берется, просто одно и то же всегда?
Да, всегда одно и то же значение, означающее степень прав при использовании приложения. Просто заголовок и значение. Без значения данного заголовка приложение вообще не открывается.
У вебдрайвера вроде бы всё еще нет API для этого. У каких-то конкретных вебдрайверов вроде можно через их аргументы, хз про хром.
Так что универсальный способ — прокси типа фидлера, GitHub - lightbody/browsermob-proxy: A free utility to help web developers watch and manipulate network traffic from their AJAX applications.
Еще тут показано как через modheader програмно. java - How to add headers or parameters to an HTTP request handled with Selenium Webdriver? - Stack Overflow
Этот способ не работает. Там права администратора нужны по доступу к какой-то папке на диске С. В общем - не вариант. Никто мне этих прав не даст.
Пытаюсь использовать browsermobproxy. Но пока рабочего кода нет. Нет примера нормального. Не нашел на гитхабе по указанной выше ссылке.
Надо просто запустить и указать адрес прокси вебдрайверу, и в обработчике addRequestFilter можно менять запрос.
https://github.com/lightbody/browsermob-proxy#using-with-selenium
Я сделал вот так и не работает
Gena.Vychuzhin, [14.01.2022 11:03]
public static void setUpProxy() {
BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start(0);
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
// put our custom header to each request
proxy.addRequestFilter((request, contents, messageInfo) -> {
request.headers().add("sberpdi", "all");
System.out.println(request.headers().entries().toString());
return null;
});
// Setting up Proxy for chrome
ChromeOptions opts = new ChromeOptions();
String proxyOption = "--proxy-server=" + seleniumProxy.getHttpProxy();
opts.addArguments(proxyOption);
currentDriver = new ChromeDriver(opts);
}
Так а выдает-то что? Страницы какие-нибудь открываются?
Вроде еще надо добавить их сертификат в систему или профиль браузера.
https://github.com/lightbody/browsermob-proxy#ssl-support
Страницы не открываются. Браузер открывается и пишет что страница не найдена или что-то такое. В понедельник зайду на ВАРМ, потом напишу.)