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

时间:2016-09-02 01:26:37

标签: selenium selenium-grid

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

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

是否有任何DesiredCapabilities设置可用于实现此功能?

1 个答案:

答案 0 :(得分:0)

Grid使用以下三个属性之一来缩小新会话请求应路由到哪个节点:

  1. 浏览器名称
  2. 平台
  3. 因此,将测试路由到节点需要其中一项。

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

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

      更新部分: 按照所寻找的方式,这里是您正在寻找的改进。

      • (a)构建一个servlet并将其注入Grid集线器。您可以从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中,那么你需要做的就是在执行option(1)之前调用这个新添加的servlet [生成随机所需功能的实用程序对象],找出下一个可用的浏览器风格,然后让你的实用程序相应地生成功能。

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