私は実行時に(セレンを使用して)ページのインスタンスを動的に作成する必要があります。そのアイデアは、文字列からクラス名を取り出して初期化することです。C#で文字列から継承したクラスを初期化する方法は?
のは、私が「GenericPage」を持っているとしましょう:
public class GenericPage
{
public void Proceed(string testName)
{
//Basic implementation
}
}
public class WhatIsYourNamePage : GenericPage
{
[FindsBy(How = How.Id, Using = "fieldName")]
[CacheLookup]
private IWebElement UserName { get; set; }
[FindsBy(How = How.Id, Using = "fieldSurname")]
[CacheLookup]
private IWebElement UserSurname { get; set; }
[FindsBy(How = How.Id, Using = "submit-first-inner-1")]
[CacheLookup]
private IWebElement Submit { get; set; }
new public void Proceed(string testName)
{
var userData = ExcelDataAccess.GetTestData(testName);
UserName.EnterText(userData.fieldName, Costants.UserNameElementName);
UserSurname.EnterText(userData.fieldSurname, Costants.SurnameElementName);
Thread.Sleep(5000);
Submit.ClickOnIt(Costants.SubmitButtonElementName);
Thread.Sleep(5000);
}
}
を進んで実装GenericPageから2番目のクラスを継承だから、ここでそれは私が動的にWhatIsYourNamePageを作成しようとしたものである。
var type = Type.GetType("WhatIsYourNamePage");
var myObject = (GenericPage)Activator.CreateInstance(type);
myObject.Proceed("LogInTest");
このように、GenericPage.Proceedを呼び出すと、しかし私はWhatIsYourNamePage.Proceedが欲しいです。
はもちろん、私は変更することができます。
var myObject = (WhatIsYourNamePage)Activator.CreateInstance(type);
しかし、私は、文字列から動的にこれを実行する必要があります。どうやって?
ここにお読みください:https://stackoverflow.com/questions/159978/c-sharp-keyword-usage-virtualoverride-vs-new – kiziu