2017-05-15 3 views
0

現在、JavaとSeleniumを使用してオートメーションフレームワークを作成しようとしています。コードがあるべき場所に変数を追加することは可能ですか?

基本的に入力を読み取り、実行可能なコードの行にすることができるコード行を作成したいと思います。たとえば、外部ファイルでは、ユーザーがフィールドに 'id'を投稿すると、そのフィールドが自分のプログラムで読み取られ、その行が実行されます。 driver.findElement(By.id(.......)

現在、私は各識別子に対してこれを行うためにif文の束を使用しています。 id、cssSelector、Xpathなどがありますが、プログラム.click、.sendKeysなどで使用されているアクションに対しても同じ処理をする必要がありますので、プログラムが拡張して全体的に非常に乱雑に見えます。

これを私がより良い方法で行うことを可能にする解決策があるのでしょうか、私は私の元のアプローチに固執していますか?

答えて

0

Reflectionはおそらくこれを解決する最も直接的な方法です。基本的には、クラスとメソッドを文字列名で検索することができます。


ここであなたが提供するスニペットを使用してこのに近づくかもしれない方法のたばこパケットの例ですが、私はあなたがダイビングの前にいくつかのdocumentationを読むことをお勧め。

Element findElementReflectively(Driver driver, String elementType, String thingToSearchFor) { 

    try { 
     Method m = By.class.getMethod(elementType, String.class); 
     if(!Modifier.isStatic(m.getModifiers())) { 
      throw new NoSuchMethodException("'By' method is not static."); 
     } 

     return driver.findElement(m.invoke(null, thingToSearchFor)); 
    } catch (IllegalAccessException | NoSuchMethodException e) { 
     throw new IllegalArgumentException("Unknown element type: " + elementType, e); 
    } catch (InvocationTargetException e) { 
     throw new RuntimeException("Failed to find requested element.", e.getCause()); 
    } 

} 
+0

感謝を検索クイック返信、私は前に反射を使用したことはありません。あなたは私の問題に関連してどのように動作するのかを簡単に教えてくれますか? –

+0

@ user31601素晴らしい考え:) – DebanjanB

+0

@Nathan Graham私は例を追加しましたが(テストされていません)、まっすぐに入る前にいくつかの入門書を読んでください。 – user31601

関連する問題