我正在用 c# 开发一个 selenium 框架。页面类使用工厂设计实例化以隐藏实例化逻辑,我希望能够使用 var myPageClass = HelperSelenium.Instance(MyPageClass)而不是实例化类var myPageClass = MyPageClass.Instance(driver)我已经尝试在 HelperSelenium 类中创建一个泛型函数,但我还不能完全理解泛型是如何工作的。PageObject 类示例(注意我使用 Instance 方法来实例化该类public class HomePage : BasePage{ private HomePage(IWebDriver driver, CountryEnum enum) : base(driver) { } private static HomePage homePage { get; set; } public static HomePage Instance(IWebDriver driver, CountryEnum enum) { switch (enum) { case CountryEnum.Sweden: HomePage = new HomePage_SWE(driver); break; case CountryEnum.Germany: HomePage = new HomePage_GER(driver); break; case CountryEnum.Italy: HomePage = new HomePage_ITA(driver); break; default: HomePage = new HomePage_UK(driver); break; } return homePage; }...}public T InstancePage<T>() where T : BasePage{ return (T).Instance(WebDriver, CountryEnum.Sweden);}Error CS0119 'T' is a type, which is not valid in the given context InfrastructureSelenium C:\testSelenium\Infrastructure\Helper\HelperSelenium.cs 140 ActiveError CS0119 'T' is a type parameter, which is not valid in the given context InfrastructureSelenium C:\testSelenium\Infrastructure\Helper\HelperSelenium.cs 140 Active
1 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
最后我通过使用修复:
public T InstantiatePage<T>() where T : class
{
// COUNTRY code as defined in
// https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
var className = string.Format("{0}_{1}", typeof(T).FullName, getCulture());
// T will be base class if no derived class with COUNTRY code suffix is found
var classType = Type.GetType(className) ?? typeof(T);
// Instantiate the page
var instance = Activator.CreateInstance(classType, new object[] { WebDriver });
return (T)instance;
}
我很确定使用 PageObject.PageFactory 可以改善它
- 1 回答
- 0 关注
- 96 浏览
添加回答
举报
0/150
提交
取消