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
爲什麼不讓登錄過程成爲獨立於應用程序其餘部分的服務?然後它可以獨立於主應用程序進行修改和重新部署 –