首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium :节点API?

Selenium :节点API?
EN

Stack Overflow用户
提问于 2018-11-26 18:57:46
回答 1查看 1.2K关注 0票数 1

问题是:

我想在AWS上运行Selenium,并希望使用它们的动态缩放。如果缩小,它只会终止一个实例..。这意味着节点可以就这样消失了。不是我想要的行为,而是使用脚本或生命周期挂钩,我可以尝试确保节点上的任何会话在终止之前都是不活动的。

似乎我可以按此API将节点从集线器:http://NODE-IP:5555/selenium-server/driver/?cmd=shutDownSeleniumServer断开。

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

其他选择?会议日志?

EN

回答 1

Stack Overflow用户

发布于 2018-12-09 07:38:04

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

几件事。你所要求的听起来像是你需要一种自我疗愈机制。这在普通香草硒网格风味中是不可用的。

Selenium节点不具备跟踪在其中运行的会话的能力。

您需要在Selenium (这里是所有这些信息所在的地方)构建所有这些信息。

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

  1. 通过扩展org.openqa.grid.selenium.proxy.DefaultRemoteProxy构建自定义代理,该代理具有以下功能:
    1. 添加一个API,当使用该API时,将代理标记为安静(意味着该节点已被标记为维护,并且将不再接受任何新的会话请求)。
    2. 覆盖getNewSession(Map<String, Object> requestedCapability),以便它首先检查节点是否处于静止状态,然后才能方便新的会话。

  1. 构建自定义servlet,当调用该servlet时,可以执行以下操作:
    1. 给定一个节点,它可以使用通过1.1构建的API,并将一个节点标记为静态
    2. 将返回没有在其中运行任何会话的节点列表。如果您通过扩展org.openqa.grid.web.servlet.RegistryBasedServlet来构建servlet,那么在servlet中您应该能够通过执行以下操作获得空闲节点urls的列表

代码语言:javascript
复制
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

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

一些有用的链接,可以帮助您对此进行定向(所有提供的链接都是我在不同时间点编写的博客)。

  1. 自愈网格- https://rationaleemotions.wordpress.com/2013/01/28/building-a-self-maintaining-grid-environment/
  2. 构建自定义代理- PROXY.html
  3. 为hub - SERVLETS.html构建自定义servlet
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53487394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档