NikS
(Nik Sidorenko)
25.Февраль.2018 13:46:41
#1
Контекст:
Пытаюсь разобраться с записью видео при параллельном выполнении тестов с использованием Selenium Grid. Уже познакомился с примерами от @ArtOfLife GitHub - sskorol/docker-selenium-grid: Custom selenium server tweaks to support video recording within docker containers и @Sergey_Pirogov GitHub - SergeyPirogov/video-recorder-java: This library allows easily record video of your UI tests by just putting couple annotations.
(Ребята, вам огромное спасибо)
Основная идея заключается в создании кастомного Servlet, который будет отвечать за начало и остановку видео на ноде.
Сразу оговорюсь, что и то и то решение работает из коробки. Но я сторонник глубокого понимания, того что использую, чтобы использовать его правильно и приспособить под себя, если потребуется.
Вопрос
Чтобы отправить http запрос для записи видео мне нужно знать адрес ноды, на которой будет выполнятся тест.
В примере от @ArtOfLife используется дополнительный класс HubProxy extends DefaultRemoteProxy, в котором адрес ноды можно получить из методов класса DefaultRemoteProxy.
В примере от @Sergey_Pirogov я доконца не разобрался откуда получается адрес ноды.
Подскажите как ещё можно узнать адрес ноды, на которую направится тест?
ArtOfLife
(Sergey Korol)
25.Февраль.2018 18:04:00
#2
Если покопаться в коде, то вот метод получения IP ноды для testng:
public static String getNodeIp(URL hubUrl, String sessionId) throws IOException {
final String hubIp = hubUrl.getHost();
final int hubPort = hubUrl.getPort();
HttpHost host = new HttpHost(hubIp, hubPort);
HttpClient client = HttpClientBuilder.create().build();
URL testSessionApi = new URL("http://" + hubIp + ":" + hubPort + "/grid/api/testsession?session=" + sessionId);
BasicHttpEntityEnclosingRequest r = new
BasicHttpEntityEnclosingRequest("POST", testSessionApi.toExternalForm());
HttpResponse response = client.execute(host, r);
JSONObject object = new JSONObject(EntityUtils.toString(response.getEntity()));
return String.valueOf(object.get("proxyId"));
1 лайк
Рекомендую забить на оба метода и использовать современные инструменты типа selenoid. VideoRecorder нужно использовать только когда у вас локальный запуск на винде
1 лайк
NikS
(Nik Sidorenko)
25.Февраль.2018 20:55:07
#4
Сам не докопался. Благодарю за помощь.
NikS
(Nik Sidorenko)
25.Февраль.2018 21:12:04
#5
Не совсем понял, почему видео можно писать только когда локальный запуск на винде?
NikS
(Nik Sidorenko)
26.Февраль.2018 12:48:20
#6
И спасибо @Sergey_Pirogov за код.
Чтобы было понятно откуда у кода ноги растут:smile::
Сам последний раз использовал года 1,5 назад, надеюсь API не изменился