无法访问动态对象的某些方法

时间:2016-08-28 18:27:46

标签: c# selenium

我正在编写一个实用程序,允许最终用户针对我公司的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 ...我只是关于难倒,任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

为什么不创建一个driver类型的IWebDriver变量,不必专门初始化,使用var

如果您需要检查driver的具体类型

if(driver.GetType() == typeof(FirefoxDriver))
{
    //do your Firefox stuff
}
else
{
    //do another browser stuff
}