如何添加 DesiredCapabilities 以随机选择 selenium grid2 中的任何可用浏览器

How to add DesiredCapabilities to randomly pick any available browser in selenium grid2

我有一个包含 7 个节点的 grid2 设置,其中每个节点都有 1 个 Firefox、chrome 和 IE 实例。

当 运行 测试时,我不想指定特定的浏览器。相反,我希望网格为我的测试选择一个随机可用的浏览器。

是否有任何 DesiredCapabilities 设置可用于完成这项工作?

网格使用以下三个属性之一来缩小应将新会话请求路由到哪个节点的范围:

  1. 浏览器名称
  2. 平台
  3. 版本

因此,要将测试路由到节点,需要其中一项。

您可以通过两种方式满足您的需求:

  1. 您可以在您的测试中本地构建一个实用程序,当被查询时,它会返回一个随机的基于浏览器的 DesiredCapability 对象(可能在循环法的基础上),从而实现您的用例。
  2. 另一种方法是构建自定义功能匹配器 [您可以参考 my blog post 了解如何执行此操作并将其连接到网格中 ] 在这个自定义功能匹配器中,您构建随机选择浏览器风格并尝试使用该信息更新传入的 requestedCapability 映射的逻辑。您在这里的里程可能会有所不同,因为该地图似乎是从进入集线器的反序列化 JSON 请求中获取的原始地图,因此您可以将其关闭。

我个人认为选项 (1) 更易于管理,并且它可以与任何网格设置一起使用。

更新部分: 按照正在寻找的内容,这是您正在寻找的改进。

  • (a) 构建一个 servlet 并将其注入 Grid hub。您可以从 here 中找到相关说明。
  • (b) 在这个新建的 servlet 中,添加围绕这些行的逻辑

    org.openqa.grid.internal.Registry registry = null;
    List<RemoteProxy> freeProxies = new LinkedList<>();
    for (RemoteProxy eachProxy : registry.getAllProxies()) {
        if (eachProxy.isBusy()) {
            continue;
        }
        //Add logic here to extract out the next usable browser by querying
        //the Proxy's TestSlot
    
    }
    
  • (c) 一旦您将这个 servlet 注入到您的 Hub 中,那么您需要做的就是在执行选项 (1) 之前调用这个新添加的 servlet [实用程序生成随机 desiredcapabilities 对象 ],找出下一个可用的浏览器风格,然后让您的实用程序相应地生成功能。

PS:此解决方案要求您使用自定义网格,其中您添加了自定义 servlet,因此无法使用普通的普通网格设置。