0
我有一个java类,用于使用selenium执行登录操作。目前有10多种不同的登录类型,因此有很多其他的参与者看起来很糟糕并且效率不高。在运行时编译java代码
如:
if (logintype == 1)
{
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("signin")).click();
}
else if (logintype ==2)
{
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("signin")).click();
}
...........
...........
除了不是有效的代码需要编写,推新的代码和服务器需要每次添加一个新的登录模块的时间重新启动。
我想看看是否可以获得登录的逻辑可以存储在数据库中,如果它可以在运行时编译。我发现groovy shell,但我不知道如何将结果返回到我的类文件。另外运行groovy shell会需要很多代码更改。是否有可能在java
public class ExecuteAuth implements Runnable{
private WebDriver driver;
driver = new FirefoxDriver(firefoxBinary, profile, cap);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().window().maximize();
//MongoDB code
DBCursor dbObjects = loginCollection.find();
while (dbObjects.hasNext()) {
DBObject dbObject = dbObjects.next();
loginModule.add(new LoginModule((BasicDBObject) dbObject));
String loginType = (String) dbObject.get("loginType")
String script;
if (loginType.equals("1")) {
script = (String) dbObject.get("script")
}
}
GroovyShell shell = new GroovyShell();
shell.evaluate(script);
RUN REST OF THE LOGIN LOGIC AFTER THE CODE IS EVALUATED
}
如果你走这条路,我想看看[盖布(http://gebish.org)特别是页面对象。 – chrylis
只是为了澄清:你想重新编译一个你的java程序的现有类,并重新加载它,所有程序运行时? – Turing85
为什么不让登录过程成为独立于应用程序其余部分的服务?然后它可以独立于主应用程序进行修改和重新部署 –