我怎样才能给 Selenium Grid 中的会话无限的空闲时间,但清理断开连接的会话?

Posted

技术标签:

【中文标题】我怎样才能给 Selenium Grid 中的会话无限的空闲时间,但清理断开连接的会话?【英文标题】:How can I give sessions in a Selenium Grid an unlimited idle time, but clean up disconnected ones? 【发布时间】:2016-01-30 22:00:00 【问题描述】:

我有一个使用以下配置的 selenium 网格:


  "port": 4444,
  "newSessionWaitTimeout": 2000

和 2 个使用此配置的节点:


  "capabilities": [
    "browserName": "chrome",
    "platform": "LINUX",
    "maxInstances": 8
  ],
  "configuration": 
    "nodeTimeout": 120,
    "port": 5555,
    "hubPort": 4444,
    "hubHost": "hubhost",
    "nodePolling": 2000,
    "registerCycle": 10000,
    "register": true,
    "cleanUpCycle": 2000,
    "timeout": -1,
    "browserTimeout": -1,
    "maxSession": 8
  

我编写了一段 Java 代码,它通过 RemoteWebDriver-Class 打开一个连接。该代码对驱动程序进行了几次调用,然后暂停了未知时间(30 秒 - 1 小时)。我不想关闭会话,因为在唤醒时,进程需要非常快速地做出反应。

超时设置为 -1 一切正常。该进程将无限期地与会话(和浏览器)保持连接。不幸的是,当自动服务决定时,该进程被随机终止。 节点识别到客户端关闭:

由于客户端超时而删除了硒

但是会话没有清理干净!无限超时使它们保持活动状态,并且网格不会释放它们以供进一步使用。

如何使用 selenium 配置解决这个问题?

构建一个调用“driver.quit()”来释放会话的 process-shutdown-hook 不是一种选择。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您注意到配置中的 "cleanUpCycle": 2000 设置了吗? 这意味着 Hub 将在 2000 毫秒内自行清理!

【讨论】:

以上是关于我怎样才能给 Selenium Grid 中的会话无限的空闲时间,但清理断开连接的会话?的主要内容,如果未能解决你的问题,请参考以下文章

多线程 Selenium WebDriver 与 Selenium Grid

selenium grid中的多个线程同步执行

Python selenium,我怎样才能删除一个元素?

我怎样才能获得所有开放的会话?

对于使用 Python 的 Selenium,我怎样才能让它按 CTRL、SHIFT、i?

在 urllib2 中使用 selenium 的会话 cookie