问题是:
我想在AWS上运行Selenium,并希望使用它们的动态缩放。如果缩小,它只会终止一个实例..。这意味着节点可以就这样消失了。不是我想要的行为,而是使用脚本或生命周期挂钩,我可以尝试确保节点上的任何会话在终止之前都是不活动的。
似乎我可以按此API将节点从集线器:http://NODE-IP:5555/selenium-server/driver/?cmd=shutDownSeleniumServer断开。
理想情况下,我需要直接为节点找到一个API来收集会话活动的数据。
其他选择?会议日志?
发布于 2018-12-09 07:38:04
注:这个答案仅适用于Selenium 3.x系列(3.14.1,这是Selenium 3系列中的最后一个版本)。Selenium 4网格体系结构是一个完全不同的体系结构,因此这个答案不一定与Selenium 4网格相关(它尚未发布)。
几件事。你所要求的听起来像是你需要一种自我疗愈机制。这在普通香草硒网格风味中是不可用的。
Selenium节点不具备跟踪在其中运行的会话的能力。
您需要在Selenium (这里是所有这些信息所在的地方)构建所有这些信息。
在较高的级别上,您需要执行以下操作
org.openqa.grid.selenium.proxy.DefaultRemoteProxy构建自定义代理,该代理具有以下功能:getNewSession(Map<String, Object> requestedCapability),以便它首先检查节点是否处于静止状态,然后才能方便新的会话。
org.openqa.grid.web.servlet.RegistryBasedServlet来构建servlet,那么在servlet中您应该能够通过执行以下操作获得空闲节点urls的列表
List<RemoteProxy> freeProxies =
StreamSupport.stream(getRegistry().getAllProxies().spliterator(), false)
.filter(remoteProxy -> !remoteProxy.isBusy())
.collect(Collectors.toList());
List<URL> urls =
freeProxies.stream().map(RemoteProxy::getRemoteHost).collect(Collectors.toList());现在,我们已经启用了自定义集线器来进行这种清理,现在您可以首先调用2.1端点来标记节点被关闭,然后继续轮询2.2端点,以检索不再支持任何测试会话的节点的所有IP和端口组合,然后在它们上调用http://NODE-IP:5555/selenium-server/driver/?cmd=shutDownSeleniumServer。
在高层次上可以做你想要做的事情。
一些有用的链接,可以帮助您对此进行定向(所有提供的链接都是我在不同时间点编写的博客)。
https://stackoverflow.com/questions/53487394
复制相似问题