我正在尝试在某些自动化测试中使用浏览器特定的resx文件。我陷入了希望实现这种类型的地步。谁能指出我正确的方向?我尝试过activator.createInstance等......没有运气。
public class WebAiiBaseTest : BaseTest
{
private readonly IDictionary<BrowserType, Type> resxMapper = new Dictionary<BrowserType, Type>{
{BrowserType.Chrome, typeof(Chrome)}
, {BrowserType.Safari, typeof(Safari)}
, {BrowserType.FireFox, typeof(Firefox)}
, {BrowserType.InternetExplorer, typeof(InternetExplorer)}
};
[TestFixtureSetUp]
public void FixtureSetup()
{
Initialize();
Launcher.LaunchRepairInformation();
}
[TearDown]
public void TestCleanUp()
{
Launcher.NavigateToRepairInformation();
}
[TestFixtureTearDown]
public void FixtureCleanup()
{
CleanUp();
}
protected object BrowserResx
{
get { return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }
}
}
此代码返回一个实例,但它是object类型。我想返回一个强类型实例。我已经尝试过CreateInstance的泛型重载,比如这个
return Activator.CreateInstance<resxMapper[ActiveBrowser.BrowserType]>();
但Visual Studio不喜欢这种语法。我在这做错了什么?感谢您的任何提示或建议。
干杯,
〜在圣地亚哥
答案 0 :(得分:0)
你的代码没有正确拼写,你试过吗
return Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]);
?
答案 1 :(得分:0)
我仍然没有得到你正在尝试做的事情,但这里是我能想到的唯一的事情,我不确定评论线程是否更清楚。
public interface IBrowser
{
}
public class Chrome: IBrowser
{
}
...
protected IBrowser BrowserResx
{
get { return (IBrowser)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }
}
可替换地:
protected T BrowserResx<T> where T: IBrowser
{
get { return (T)Activator.CreateInstance(resxMapper[ActiveBrowser.BrowserType]); }
}
..如果您的课程被设计为通用课程。如果浏览器类型或接口没有基类,则无法返回更强类型的内容:它们只共享“对象”。