このリンク: http://www.codeproject.com/Articles/19911/Dynamically-Invoke-A-Method-Given-Strings-with-Met は、メソッド名と文字列変数の型がある場合にメソッドを呼び出す方法を明確に説明しています.
WatiNでac#プロジェクトを作っています。私が使用するすべての WatiN メソッドは同じ形式です。
例: *( ById,.ByClass..; 接続する必要がありますが、太字に設定できませんでした :s )
browser.**TextField**(Find.By **Id**("name")).**TypeText**("my name");
browser.**Span**(Find.By **Class**("main_title")).**Click(**);
browser.**Link**(Find.By **Id**("mid_link")).**Click(**);
ご覧のとおり、これは常に可変の 3 つのメソッドで構成されています。タグ、タイプ、検索、アクションの文字列プロパティで構成されるクラス webElement を作成しました。
例のどこに -> tag = "TextField"; type = "Id", search = "name"; action = "TypeText"
.
Web 要素を動的に取得するために、適切なメソッドを動的に呼び出そうとする WebHandler クラスを作成しました。
したがって、メイン クラスにはすべての webElement オブジェクトのリストがあり、特定の時間に適切なオブジェクトを WebHandler クラスに渡すことができます。Webhandler クラスは、各要素を動的に呼び出す必要があります。指定された URL と同じ呼び出しメソッドを使用するため、それを呼び出すコードは次のとおりです。
クラス WebHandler:
private IE browser = new IE("google.com");
public void method(WebElement webElement)
{
//Get the findBy dynamically | this works
WatiN.Core.Constraints.Constraint findBy =
(WatiN.Core.Constraints.Constraint)InvokeMethod("WatiN.Core.Find, WatiN.Core", "By" + webElement.Type, webElement.Search); //where type = "Id" and search = "name"
//Get the tag (like textfield, link, span) dynamically | this does not work
Type aType = Type.GetType("WatiN.Core." + webElement.Tag, "WatiN.Core") //how can I set the element variable to this type? aType element -> Does not work
aType element = (WatiN.Core.TextField)InvokeMethod("this.browser", webElement.Tag, findBy); //tag = TextField
element.TypeText("a name"); //same problem as above | so should be invoked
}
質問:
- 文字列バージョン "TextField" を変数として使用して、インスタンス クラス IE ( browser ) のメソッド ( TextField ) を動的に呼び出すにはどうすればよいですか? 別の言い回しは次のようになります:文字列バージョンの "browser" を使用して現在の変数 ( browser )を取得するにはどうすればよいですか?
- 変数要素のタイプを動的に設定するにはどうすればよいですか? したがって、webElement.Tag = Textfield の場合、型は WatiN.Core.TexField element = .. である必要があります (コードを参照)。
独自の考慮事項:
- 私が見つけた主な問題は、その型のインスタンスからではなく、型からしかメソッドを呼び出せないことです。とにかくこれを行う方法はありますか?