我正在编写一个实用程序,允许最终用户针对我公司的Web应用程序执行一些Selenium测试,到目前为止一切顺利。问题在于:我希望允许用户根据他们的系统上是否安装了chrome或firefox来选择他们要实现的selenum.webdriver对象的类型。
所以,我初始化一个对象列表,让我们知道用户选择了什么
public List<object> BuildBrowserAccess(string browserEngine)
{
OpenQA.Selenium.Chrome.ChromeDriver driverC = null;
OpenQA.Selenium.Firefox.FirefoxDriver driverF = null;
if (browserEngine == "Firefox")
{
driverF = new OpenQA.Selenium.Firefox.FirefoxDriver();
}
else if (browserEngine == "Chrome\t")
{
driverC = new OpenQA.Selenium.Chrome.ChromeDriver();
}
List<object> browserEngines = new List<object>();
browserEngines.Add(driverC);
browserEngines.Add(driverF);
return browserEngines;
}
然后返回主程序,将选择的任何一个(即非空)分配给动态对象,然后使用“as”将对象转换为静态:
List<object> browserEngines = mainActions.BuildBrowserAccess(browserEngine);
if (browserEngines[0] != null )
{
driver = browserEngines[0];
finDriver = driver as OpenQA.Selenium.Chrome.ChromeDriver;
}
else
{
driver = browserEngines[1];
finDriver = driver as OpenQA.Selenium.Firefox.FirefoxDriver;
}
即使在运行时,转换看起来也很成功,而且我可以使用FirefoxDriver命名空间的一些方法,但是许多其他方法可以正常使用静态类型的对象抛出RuntimeBinderException ...我只是关于难倒,任何帮助表示赞赏!
答案 0 :(得分:0)
为什么不创建一个driver
类型的IWebDriver
变量,不必专门初始化,使用var
?
如果您需要检查driver
的具体类型
if(driver.GetType() == typeof(FirefoxDriver))
{
//do your Firefox stuff
}
else
{
//do another browser stuff
}