2017-05-15 202 views
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 
} 
+0

如果你走這條路,我想看看[蓋布(http://gebish.org)特別是頁面對象。 – chrylis

+0

只是爲了澄清:你想重新編譯一個你的java程序的現有類,並重新加載它,所有程序運行時? – Turing85

+0

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

回答

2

我強烈建議不要這種方法。你正在打開一扇惡意代碼的大門,將其注入你的應用程序中。另一種方式可以上傳到服務器新的罐子,並採取類加載器的優勢在運行時加載類:

此外,你必須替代方案,以避免如果其他的:接口使用和工廠方法是要走的路,imho。例如,將登錄的實現放在實現登錄界面的不同類上。

工廠方法設計模式: