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

centos+selenium server+chromedriver Unable to find a free port

linux
webdriver
chrome
Теги: #<Tag:0x00007f7b634779b8> #<Tag:0x00007f7b63477850> #<Tag:0x00007f7b63477710>

(Ant1dot) #1

Доброго дня.
Поставили задачу: гонять тесты под UNIX.

Почитали, выбрали xvfb для запуска. Установили все. Работает.
НО, есть проблема с прогоном тестов: 1 машина == 1 инстансу chrome
У нас виртуалки выдерживают 4 chrome спокойно. В настройках ноды выставляем 4 (на винде все ок)
После запуска одного браузера на ноде, остальные падают с исключением:
selenium.common.exceptions.WebDriverException: Message: Unable to find a free port

Как я понимаю chromedriver пытается стартануть на дефолтном порту 9515, который уже занят.
На винде порты выбираются рендомно, как я понимаю.
Запускаем ноду вот так:
DISPLAY=:99 xvfb-run -a -n 1 -l -s “-screen 0, 8000x2000x16” java -jar /home/autotest/selenium-server-standalone-2.48.2.jar -role node -nodeConfig nodeconfig.json

Помогите решить проблему.

UPD1
Exception с ноды
Caused by: java.lang.RuntimeException: Unable to find a free port
at org.openqa.selenium.net.PortProber.findFreePort(PortProber.java:67)
at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:292)
at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:88)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:138)
… 14 more
13:45:41.442 WARN - Exception: Unable to find a free port

Посмотрел как запустил 1 chromedriver сервер, все ок вроде, порт не стандартный

autotest@test-selenium26-unix ~]$ ps -fp 3795
UID PID PPID C STIME TTY TIME CMD
autotest 3795 3762 3 13:45 pts/5 00:00:00 /home/autotest/chromedriver --port=1024

UPD2
Позапускал под Windows, порты все время для запуска chromedriver разные.
А под UNIX запустил два раза, порт 1024 оба был, такое ощущение, что он его не генерирует или не видит другие


(Ray Romanov) #2

А что в nodeconfig.json ?


(Ant1dot) #3

Тоже, что и на винде

{
“capabilities”:
[
{
“browserName”: “chrome”,
“maxInstances”: 4,
“seleniumProtocol”: “WebDriver”,
“version”: “DEFAULT”
}
],
“configuration”:
{
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“maxSession”: 4,
“port”: 5555,
“host”: host,
“register”: true,
“registerCycle”: 5000,
“hubPort”: 4444,
“hubHost”: test-selenium10
}
}


(Ant1dot) #4

Решили проблему, пришлось посмотреть код selenium server

А именно, как он вычисляет диапазон портов.
В linux он смотрит в файл /proc/sys/net/ipv4/ip_local_port_range
У нас там был диапазон 1024 65535, а как мы поняли, selenium берет все вне этого диапазона, поэтому у нас был один порт - 1024.
Поправили настройки на 5000 65535, теперь запускается на портах с 1024 - 5000.


(Aleksey Myedyentsov) #5

Спасибо за решение проблемы, я таким же способом решил вопрос!