我需要在运行时在服务器和运行 Selenium Web 驱动程序的多个远程客户端之间分发业务逻辑。我已经研究了对象序列化,RMI,动态下载JAR,通过Java和硒网格的硒化。详细信息:预计多个远程客户端将通过互联网上的 JMS 轮询队列,以获取在给定网站上执行某些工作的订单。每个客户端将启动Selenium WebDriver,在客户端运行时之前以未预定义(或仅以非常抽象的术语)的方式遍历该网站,然后返回轮询队列,直到再次调用。挑战在于,客户不会事先知道网站和确切的遍历步骤。我可以在服务器上提前定义抽象的步骤/方法,但客户端将依赖于某种下载的数据来精确地获取Selenium命令列表。在这些步骤中还需要一些循环 ()。repeat until...例如,如果我们定义 example1.com:void login()点击“用户名”字段发送密钥“用户名”点击“密码”字段发送密钥“密码”点击“提交”而对于 example2.com 将是:void login()点击“登录”框等待“用户名”字段出现点击“用户名”字段点击“继续”等。研究:序列化:仅传输对象变量,而不传输对象逻辑。RMI:对象逻辑在服务器上执行,而不是在客户端上执行,因此它无法与客户端的Selenium实例进行交互。即时下载 JAR:此处可能的解决方案,此处不太乐观。这些现实吗?硒:可能无法直接在 Java 下运行。使用硒运行器-java可能是可能的,但这似乎只是命令行,这将限制与客户端软件的交互,从而限制功能硒网格:节点(客户端)必须始终连接到集线器(服务器),这不能保证如何在运行时将业务逻辑从服务器分发到客户端?
1 回答

隔江千里
TA贡献1906条经验 获得超10个赞
您可以使用通用的 Selenium 运行方法声明一个接口,如下所示。SeleniumRunner
public void runSelenium(WebDriver driver);
如在动态编译源文件时如何为 JavaCompiler 提供接口中所述,您可以将源文件传输到客户端并在运行时编译它们。该类必须实现上述接口。
File sourceFile = new File("SeleniumClass1234.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
...
SeleniumRunner sr = (SeleniumRunner) Class.forName("SeleniumClass1234").newInstance();
sr.runSelenium(driver);
或者,您可以将jar文件传输到客户端并在运行时加载它们,如第二个链接中所述,我应该如何在运行时动态加载Jars?。您还需要此处的界面。否则,您的解决方案将包含大量反射和其他配置设置,以查找和使用包含逻辑的正确方法。
添加回答
举报
0/150
提交
取消