2017-05-15 32 views
0

私は、セレンを使ってログインアクションを実行するために使用されるjavaクラスを持っています。現在、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(); 
} 
........... 
........... 

新しいコード効率的ではないがプッシュされ、書き込む必要があると、サーバは新しいログインモジュールが追加されるたびに再起動する必要があります。

私はログインのロジックをdbに保存できるかどうか、また実行時にコンパイルできるかどうかを確認したいと考えました。私はグルーヴィーシェルを見つけましたが、結果をクラスファイルに戻す方法はわかりません。 groovyシェルを実行すると、多くのコード変更が必要になります。それは可能ですか?

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

私はこのアプローチに強くお勧めします。あなたはあなたのアプリケーションに不正なコードを挿入するためのドアを開いています。もう一つの方法は、あなたの新しいjarファイルサーバーにアップロードして、実行時にクラスをロードするクラスローダを利用することができます:

はまた、あなたが避けるために選択肢を持っている場合は、他の人の:インターフェイスの使用方法ファクトリーメソッドは、imhoに行く方法です。たとえば、Loginインターフェイスを実装する異なるクラスにログインの実装を配置します。

ファクトリーメソッドデザインパターン:

関連する問題