问题:
我想在AWS上运行Selenium Grid,并希望使用其动态缩放。按比例缩小时,它将仅终止一个实例……这意味着节点可以像这样消失。不是我想要的行为,而是使用脚本或生命周期挂钩,我可以尝试确保节点上的任何会话在终止之前都不处于活动状态。
好像我可以点击此API断开节点与集线器的连接:http://NODE-IP:5555/selenium-server/driver/?cmd=shutDownSeleniumServer
理想情况下,我需要直接找到该节点的API来收集会话活动的数据。
替代品?会话日志?
答案 0 :(得分:0)
注意: 此答案仅对Selenium 3.x系列有效(3.14.1是今天的Selenium 3系列的最后一个构建版本)。 Selenium 4网格体系结构是一种完全不同的体系结构,因此,此答案不一定与Selenium 4网格相关(尚未发布)。
事物的结合。您所要求的声音就像您需要一种自我修复机制。普通的香草硒网格味无法提供此功能。
Selenium节点不具有跟踪其中运行的会话的功能。
您需要在Selenium Hub(所有这些信息所在的位置)中构建所有这些文件。
从总体上讲,您需要执行以下操作
org.openqa.grid.selenium.proxy.DefaultRemoteProxy
来构建自定义代理,该代理将具有以下功能:
getNewSession(Map<String, Object> requestedCapability)
,以便它首先检查节点是否处于静止状态,然后才促进新会话。org.openqa.grid.web.servlet.RegistryBasedServlet
来构建servlet,则在servlet中您应该能够通过执行以下操作来获取空闲节点网址的列表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
。
从总体上讲,它可以满足您的需求。
一些有用的链接可以帮助您了解这一点(所有提供的链接都是我在不同时间撰写的博客)。