强制不在网格中使用Selenium RC

时间:2017-05-15 06:49:38

标签: selenium selenium-grid selenium-hub

我将提供一个Selenium网格,并希望强制我们的开发人员不再使用RC API。 根据我的学习,RC已被弃用,在客户端,您需要导入旧代码:https://seleniumhq.github.io/selenium/docs/api/java/deprecated-list.html

但是如果开发人员使用旧的RC调用怎么办?我发现无法在集线器上禁用RC支持。我在Selenium 3.4.0上尝试了

1 个答案:

答案 0 :(得分:1)

没有直接的方法可以做到这一点。但这是一个如何做到这一点的黑客。

  • 在测试项目中,创建一个新包org.openqa.grid.selenium.proxy
  • 现在将类DefaultRemoteProxy复制到您创建的这个包中(这将导致Java现在开始使用您的DefaultRemoteProxy版本,而不是Selenium代码库中提供的版本)
  • 现在在DefaultRemoteProxy的复制版本中,将其构造函数更改为如下所示。
  • 使用以下机制之一创建将用于启动Hub的工件。
    • 从测试项目中创建一个超级jar,以便它可以用作Selenium独立jar(或)
    • 从项目中创建一个jar,将其放入Selenium独立jar的CLASSPATH中,然后使用java -cp(随意选择适合您的选项)
  • 使用上面创建的工件,从集线器开始。

在此之后,您应该能够阻止人们将其节点注册到协议为Selenium RC的集线器。

public DefaultRemoteProxy(RegistrationRequest request, Registry registry) {
    super(request, registry);
    for (TestSlot slot : getTestSlots()) {
        if (slot.getProtocol() == SeleniumProtocol.Selenium) {
            throw new IllegalStateException("Selenium RC Protocol is NOT supported.");
        }
    }

    pollingInterval = config.nodePolling != null ? config.nodePolling : DEFAULT_POLLING_INTERVAL;
    unregisterDelay = config.unregisterIfStillDownAfter != null ? config.unregisterIfStillDownAfter : DEFAULT_UNREGISTER_DELAY;
    downPollingLimit = config.downPollingLimit != null ? config.downPollingLimit : DEFAULT_DOWN_POLLING_LIMIT;
}

这可以帮助你实现目标。

另一方面,您需要确保在Selenium代码库中不断监控 org.openqa.grid.selenium.proxy.DefaultRemoteProxy 的内容并不断更新本地版本,否则你可能会遇到事情不同步的情况。