TL; DR;如果Selenium Grid中的节点死亡,Selenium Hub将重新启动。为什么?
我使用https://github.com/kubernetes/examples/tree/master/staging/selenium中的文件在Kubernetes中使用Selenium Grid。
我注意到每次Chrome或Firefox节点因为达到资源限制而被杀死时,Hub也会重新启动,最终会断开所有其他节点的连接几分钟。为什么?这是预期的行为吗?我期待只有一个节点断开连接,但所有其他节点都可用。
它与Kubernetes无关,因为我也在Docker Swarm中重现了这个问题。此外,它没有特别关于Selenium的版本,我已经用3.7,3.11和最新的3.12复制了它。
实际上,它很容易重现,只需启动网格将节点限制为500MB,将它们发送到Youtube,最终会崩溃。发生这种情况时,您甚至无法访问Grid的控制台,因为它也崩溃了。
我注意到该问题仅在节点崩溃时触发。如果您只是杀死节点(例如docker rm -f selenium-node-firefox-x62gxj
),一切都很好,它将重新加入网格而不会出现任何中断。
下面是相关代码,虽然我认为这是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
网格的网址和browser
字符串" CHROME"或" FIREFOX"。
答案 0 :(得分:1)
好的,我在IRC的#selenium频道得到了答案。
原因如下:
当节点死亡时,集线器会通过查询几次来删除它 没有答案后,它将删除它。当发生这种情况时,如果你得到网格 控制台,它变慢(一些内部如何管理节点列表,我们 应该改进那个)因为它变慢了,我想象 livenessProbe超时因此可能会杀死集线器并带来新的 一个
有效增加健康检查,解决问题。