我试图通过实现自定义代理来停止硒集线器注册节点。我有一些适用于自定义代理的代码。但是,客户端可以通过不在其配置中指定自定义代理来解决此问题。有没有一种方法可以强制节点使用自定义代理而不使用DefaultRemoteProxy。

还是我可以在Selenium项目中实现某些功能以通过Selenium Hub验证节点?

最佳答案

没有优雅的方法可以做到这一点。
这是一个肮脏的技巧,您可以使用它来完成此任务。


创建一个新的标记界面(将其称为Registrable
创建一个新类,其内容与org.openqa.grid.selenium.proxy.DefaultRemoteProxy的内容重复(我喜欢将此方法称为CLASSPATH重写,但请确保对此有一个更优雅的名称),使得该新类也称为DefaultRemoteProxy,并且位于相同的软件包org.openqa.grid.selenium.proxy,但在测试项目中。
现在在构造函数内部添加一个编辑检查,如下所示。
现在,从该项目中创建一个uber jar,以便可以将其拆分为Hub。


这是Registrable的样子

public interface Registrable {}

这是修改后的DefaultRemoteProxy构造函数的样子:

public DefaultRemoteProxy(RegistrationRequest request, Registry registry) {
 super(request, registry);
 if (!(this instanceof Registrable)) {
  throw new UnsupportedOperationException("Cannot proceed further");
 }
 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;
}


现在,您可以调整自定义代理,以实现Registrable接口。因此,任何尝试使用DefaultRemoteProxy注册其节点的人都会不断失败,因为DefaultRemoteProxy没有实现Registrable接口。

这对您有用吗?

10-06 13:49