每次节点被杀死时,Selenium Grid都会重新启动

时间:2018-05-17 08:57:32

标签: selenium selenium-grid

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"。

1 个答案:

答案 0 :(得分:1)

好的,我在IRC的#selenium频道得到了答案。

原因如下:

  

当节点死亡时,集线器会通过查询几次来删除它   没有答案后,它将删除它。当发生这种情况时,如果你得到网格   控制台,它变慢(一些内部如何管理节点列表,我们   应该改进那个)因为它变慢了,我想象   livenessProbe超时因此可能会杀死集线器并带来新的   一个

有效增加健康检查,解决问题。