Selenium网格:节点API?

Selenium网格:节点API?,selenium,selenium-grid,Selenium,Selenium Grid,问题是: 我想在AWS上运行Selenium网格,并希望使用它们的动态缩放。按比例缩小时,它只会终止一个实例。。。这意味着一个节点可以像那样消失。这不是我想要的行为,但使用脚本或生命周期挂钩,我可以尝试并确保节点上的任何会话在终止之前都不处于活动状态 似乎我可以点击此API断开节点与集线器的连接: 理想情况下,我需要找到一个直接连接到节点的API来收集会话活动的数据 替代品?会话日志?注意: 这个答案仅适用于Selenium 3.x系列(3.14.1是Selenium 3系列的最后一个版本)。S

问题是:

我想在AWS上运行Selenium网格,并希望使用它们的动态缩放。按比例缩小时,它只会终止一个实例。。。这意味着一个节点可以像那样消失。这不是我想要的行为,但使用脚本或生命周期挂钩,我可以尝试并确保节点上的任何会话在终止之前都不处于活动状态

似乎我可以点击此API断开节点与集线器的连接:

理想情况下,我需要找到一个直接连接到节点的API来收集会话活动的数据

替代品?会话日志?

注意: 这个答案仅适用于Selenium 3.x系列(3.14.1是Selenium 3系列的最后一个版本)。Selenium 4网格体系结构是一个完全不同的体系结构,因此,这个答案不一定与Selenium 4网格(其尚未发布)相关

两件事。你所要求的听起来像是你需要一种自我修复机制。这在纯香草硒网格口味中不可用

Selenium节点,不具有跟踪在其中运行的会话的功能

您需要在Selenium中心(所有这些信息都驻留在该中心)构建所有这些

在较高的级别上,您需要执行以下操作

  • 通过扩展
    org.openqa.grid.selenium.proxy.DefaultRemoteProxy
    构建自定义代理,该代理将具有以下功能:
  • 添加一个API,该API在使用时会将代理标记为静止(意味着该节点已标记为进行维护,并且不再接受任何新的会话请求)
  • 覆盖
    getNewSession(Map requestedCapability)
    ,以便它首先检查节点是否处于静止状态,然后才促进新会话
  • 构建一个自定义servlet,调用该servlet时可以执行以下操作:
  • 给定一个节点,它可以使用通过1.1构建的API并将节点标记为静止
  • 将返回没有运行任何会话的节点列表。如果您通过扩展
    org.openqa.grid.web.servlet.RegistryBasedServlet
    来构建servlet,那么在servlet中,您应该能够通过执行以下操作来获取免费节点URL列表
  • 列出自由代理=
    StreamSupport.stream(getRegistry().getAllProxies().spliterator(),false)
    .filter(remoteProxy->!remoteProxy.isBusy())
    .collect(Collectors.toList());
    列出URL=
    freeProxies.stream().map(RemoteProxy::getRemoteHost.collect(Collectors.toList());
    
    现在我们有了自定义集线器,该集线器现在启用了执行此清理的功能,您现在可以首先调用2.1端点以标记要关闭的节点,然后继续轮询2.2端点以检索不再支持任何测试会话的节点的所有IP和端口组合,然后调用
    http://NODE-IP:5555/selenium-服务器/驱动程序/?cmd=shutDownSeleniumServer

    在高层次上可以做你想要的事情

    一些有用的链接可以帮助你了解这一点(所有提供的链接都是我在不同时间点写的博客)

  • 自愈网格-
  • 构建自定义代理-
  • 为中心构建自定义servlet-

  • 感谢克里希南,贝宝的selion项目中还有一个定制代理。同样的方法也在那里实施。这里:我是为这个问题建立代理和SeLion项目的团队的一员。是的,现在很清楚为什么我总是在互联网上面对你关于selenium项目的答案:)你对Zalenium-SeLion项目有什么经验吗?关于这个问题,api-网格管理,自愈问题等。。。对于一个新的项目,你更喜欢哪一个?@Ferhat-自从我重新开始查看
    SeLion
    以来,已经有一段时间了,所以我不知道它的最新和最伟大的功能。我个人没有使用Zalenium,所以我不确定。