TL; DR :我需要在运行时在服务器和运行Selenium WebDriver的多个远程客户端之间分发业务逻辑。
我研究了对象序列化,RMI,通过Java和Selenium Grid即时下载JAR,Selenese。
详细信息:预计多个远程客户端将通过Internet上的JMS轮询队列,以获取订单以在给定的网站上进行某些工作。每个客户端将启动Selenium WebDriver,以客户端运行时之前未预先定义的方式(或仅非常抽象的方式)遍历该网站,然后返回轮询队列直到再次调用
挑战在于,网站和确切的遍历步骤都不会提前告知客户。我可以预先在服务器上定义抽象步骤/方法,但是客户端将依赖某种下载的数据来精确获取Selenium命令列表。这些步骤(repeat until...
)中还需要一些循环。
例如,如果我们为example1.com定义void login()
:
例如example2.com void login()
为:
已研究:
如何在运行时以这种方式将业务逻辑从服务器分发到客户端?
答案 0 :(得分:1)
您可以使用通用的Selenium运行方法声明接口SeleniumRunner
。
public void runSelenium(WebDriver driver);
如How to provide an interface to JavaCompiler when compiling a source file dynamically?中所述,您可以将源文件传输到客户端并在运行时对其进行编译。该类必须实现上述接口。
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);
或者,您也可以按照第二个链接How should I load Jars dynamically at runtime?中所述,将jar文件传输到客户端并在运行时加载它们。您还将在这里需要该接口。否则,您的解决方案将包含很多反思和其他配置设置,以查找和使用包含您的逻辑的正确方法。