TL; DR;если узел в Selenium Grid умирает, Selenium Hub перезапускается.Почему?
Я использую Selenium Grid в Kubernetes, используя файл из https://github.com/kubernetes/examples/tree/master/staging/selenium.
Я заметил, что каждый раз, когда узел Chrome или Firefox уничтожается, потому что он достигает ресурсаКроме того, концентратор также перезагружается, отключая все остальные узлы на пару минут.Зачем?Это ожидаемое поведение?Я ожидал, что только узел будет отключен, но все остальные узлы будут доступны.
Это не относится к Kubernetes, так как я воспроизвел проблему также в Docker Swarm.Кроме того, это не является специфическим для версии Selenium, я воспроизвел ее с 3.7, 3.11 и последней 3.12.
На самом деле, довольно легко воспроизвести, просто запустите Grid, ограничив узлы 500 МБ, запустите их на Youtube, и в конце концов произойдет сбой.Когда это произойдет, вы не сможете получить доступ даже к консоли Grid, потому что она тоже вылетела.
Я заметил, что проблема возникает только при сбое узла.Если вы просто убьете узел (например, docker rm -f selenium-node-firefox-x62gxj
), все в порядке, и он снова присоединится к Grid без каких-либо сбоев.
Ниже приведен соответствующий код, хотя я думаю, что это проблема непосредственно с Grid.
def get_driver(browser, selenium_grid):
if browser == 'CHROME':
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--autoplay-policy=no-user-gesture-required')
capabilities = options.to_capabilities()
else:
capabilities = getattr(DesiredCapabilities, browser)
return webdriver.Remote(
command_executor=selenium_grid,
desired_capabilities=capabilities
)
driver = get_driver(browser, selenium_grid)
driver.get(channel_url)
channel_url
- это ссылка на видео на YouTube.selenium_grid
URL-адрес сетки и browser
строка «CHROME» или «FIREFOX».