Browsermob proxy + Java + WebDriver помогите запустить простейший тест

Мучаемся вторую неделю, запуск простейшего теста с browsermob и получаение har архивад для просмотра ни как не удаётся.

Нужна помощь java знатока сталкивающегося с browsermobProxy , желательно рабочий пример тесты либо еще как-то. Всё чтоесть в сети. валится по разным причинам и исправить их ни как не удаётся.

http://internetka.in.ua/browsermobproxy-selenium-perfomance/

Для случая с удаленным запуском уже давал ответ здесь.

Запуск прокси

 protected static void initProxy() {
        try {
            ServerSocket socket = new ServerSocket(0);
            localProxyPort.set(socket.getLocalPort());
            socket.close();
        } catch (IOException e) {/**/}
        ProxyServer server = new ProxyServer(localProxyPort.get());
        try {
            server.start();
            server.setCaptureContent(true);
            server.setCaptureHeaders(true);
            server.newHar("test");
        } catch (Exception e) {/**/}
        proxyServer.set(server);
    }

инициализация драйвера

DesiredCapabilities capabilities = null;
Proxy proxy = new Proxy();
String m_proxy = <host>+ ":" + <port>;
proxy.setHttpProxy(m_proxy).setFtpProxy(m_proxy);
capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(CapabilityType.PROXY, proxy);
new ChromeDriver(capabilities);

я делала так, работает

Хочу уточнить, а зачем server socket поднимать и тушить сразу? Для чего он здесь вообще?

я так нахожу свободный порт для прокси сервера

по ходу с драйвером версии више 2.39 браузер моб не работает.

Видео от Алексея Баранцева по BrowserMob Proxy + примеры на GitHub:

Привет!
Ну как, удалось запустить browsermob proxy?

Я на днях столкнулся с такой же проблемой. Покопавшись пару часов в исходниках, обнаружил, что BrowserMob Proxy игнорирует все запросы, начинающиеся на “http://localhost”. А я как раз всегда свои тесты запускаю именно на “http://localhost:8080”, поэтому он мои запросы вчистую игнорировал.

Собственно хотел узнать как обстоят дела с Browsermob? Последняя версия вышло достаточно давно. Как работает с последними версиями селениум?

Работает.
У меня есть тест, который проверяет взаимодействие последнего BrowserMobProxy с последним Selenium. Запускается регулярно. Проблем нет.

Похоже, я наврал.
BrowserMob Proxy не работает с последними версиями Selenium. Похоже, давно.
Кто-нибудь что-нибудь смог с этим сделать?

А вы новые версии BMP пробовали? Разработчики начали активно рефакторить древний code base. Последнюю версию попробовал с selenium 2.48.2 - работает.

Я пробовал - у меня не работает.
Дело в том, что browsermob-proxy использует очень старую версию Jetty (7.6.16.v20140903), а я в проекте хочу использовать гораздо более новую. А с новой версией Jetty browsermob-proxy не запускается. Я даже попробовал форкнуть и обновить - не получается, там слишком много изменений выходит.

У меня 24 селенид с BMP 2.1.0-beta-3 запустился, правда там они разделили проект, и плавно переезжают на другую прокси -
<artifactId>browsermob-core-littleproxy</artifactId>

BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start(0);

правда там ещё не всё перенесено browsermob-proxy/new-interface-compatibility.md at master · lightbody/browsermob-proxy · GitHub.

@asolntsev ведь написал, что проблема в старой версии Jetty. Дело не в Selenide (ему то Jetty не нужен), а в том, что у них наверняка код автотестов лежит вместе с основным кодом приложения. Т.е. если где-то в проекте нужна более свежая версия Jetty, тут уже возникает конфликт.

1 лайк

Так точно.
На самом деле jetty я хочу запускать из тестов самой Selenide - в первую очередь чтобы протестировать методы upload/download. Конечно, можно было бы задауншифтиться на старую jetty, но блин, в 21 веке же живём. :frowning:

Так и я о том, что БМП можно использовать без джетти, с литтлепрокси.

У littleproxy внутри dependency на jetty. К тому же, в BMP вшита еще и не самая свежая версия, где jetty еще 7.6.16.v20140903, как написали выше.

Да, BMP вроде как можно использовать без джетти. LittleProxy вроде как использует Netty.
Но в этом варианте у меня не получилось интерсептить ответы сервера. Вот не заходит LittleProxy в метод serverToProxyResponse(), как я ни бился.