Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置一个对象的实例,如下代码所示?_C#_Selenium_Variables_Webdriver_Set - Fatal编程技术网

C# 如何设置一个对象的实例,如下代码所示?

C# 如何设置一个对象的实例,如下代码所示?,c#,selenium,variables,webdriver,set,C#,Selenium,Variables,Webdriver,Set,我希望你能帮我解决问题,请: 在我的测试类中,我尝试运行我的测试代码: [setUp] public void setup() { BrowserFactory.InitBrowser("Chrome"); } 但是,它失败了,因为它没有初始化“driver”变量 (我得到消息:system.nullReferenceException:WebDriver浏览器实例未初始化。应首先调用InitBrowser方法) 下面是我从中复制的InitBrowser()函数的代码 使用OpenQA.Sel

我希望你能帮我解决问题,请: 在我的测试类中,我尝试运行我的测试代码:

[setUp]
public void setup()
{
BrowserFactory.InitBrowser("Chrome");
}
但是,它失败了,因为它没有初始化“driver”变量

(我得到消息:system.nullReferenceException:WebDriver浏览器实例未初始化。应首先调用InitBrowser方法)

下面是我从中复制的InitBrowser()函数的代码

使用OpenQA.Selenium;
使用OpenQA.Selenium.Chrome;
使用OpenQA.Selenium.Firefox;
使用OpenQA.Selenium.IE;
使用制度;
使用System.Collections.Generic;
命名空间_AutomationTests.WrapperFactory
{
公共类浏览器工厂
{
私有静态只读IDictionary驱动程序=新字典();
专用静态IWebDriver;
公共静态IWebDriver
{
得到
{
if(驱动程序==null)
抛出新的NullReferenceException(“WebDriver浏览器实例未初始化。应首先调用InitBrowser方法”);
返回驱动器;
}
专用设备
{
驱动因素=价值;
}
}
公共静态浏览器(字符串浏览器名)
{
开关(浏览器名称)
{
案例“Firefox”:
if(驱动程序==null)
{
驱动程序=新的FirefoxDriver();
添加(“Firefox”,驱动程序);
}
打破
案例“IE”:
if(驱动程序==null)
{
driver=新的InternetExplorerDriver(@“C:\PathTo\IEDriverServer”);
驱动程序。添加(“IE”,驱动程序);
}
打破
案例“铬”:
if(驱动程序==null)
{
driver=new ChromeDriver();/@“C:\PathTo\CHDriverServer”
驱动程序。添加(“铬”,驱动程序);
}
打破
}
}
公共静态void加载应用程序(字符串url)
{
Url=Url;
driver.Manage().Window.Maximize();
driver.Navigate().gotour(“javascript:document.getElementById('overridelink')。click()”;
}
公共静态void CloseAllDrivers()
{
foreach(驱动程序中的var键。键)
{
驱动程序[key].Close();
驱动程序[key]。退出();
}
}
}
}


非常感谢

您的代码中有一个bug

您应该更改以下每一行:

if(驱动程序==null)

为此:

if(驱动程序==null)

另一个选项是更改get from:

    get
    {
        if (driver == null)
            throw new NullReferenceException("The WebDriver browser instance was not initialized. You should first call the method InitBrowser.");
        return driver;
    }
致:


Mar,尝试粘贴项目的完整源代码。项目中ChromeDriver()、FirefoxDriver()和InternetExplorerDriver()的C#类在哪里。你事先把它们编码好了吗? 此处IWebDriver驱动程序是一个属性

在公共静态IWebDriver的getter中不需要空检查

public BrowserFactory()
        {
            Driver = new FirefoxDriver();
        }

        public static IWebDriver Driver
        {
            get
            {

                return driver;
            }
            private set
            {
                driver = value;
            }
        }
在静态初始值设定项或构造函数中加载类时,将IWebDriver的属性设置为实例,如:

甚至在驱动程序可以初始化之前,get属性就被调用了,它将null检查赋值为true&因此引发异常

要问自己的问题:

  • 您是否为Firefox、Chrome和IE添加了库文件
  • 它是项目配置文件的一部分吗
  • 如果没有添加,最好的添加方法是在VisualStudio中使用Nuget包管理器 4.这些参考资料应该是您项目的一部分。让我发布一个我尝试过的类似项目的截图 5.参见Nuget Package Manager的图片 6.单击管理Nuget软件包,浏览可用软件包 七,

  • 最后,您没有设置驱动程序的新实例

  • [预告]

    {
        class Driver
        {
            public enum Browser
            {
                chrome,
                firefox,
                ie,
            }
            public IWebDriver getDriver(string browser_type)
            {
                Browser parsed_browser_type; IWebDriver driver=null;
                bool passed_type = browser_type != null ? true : false;
                if (passed_type)
                {
                    Enum.TryParse(browser_type, out parsed_browser_type);
    
                    switch (browser_type.ToLower())
                    {
    
                        case "chrome":
                           driver= new ChromeDriver(new ChromeOptions { Proxy = null });
                            break;
                        case "firefox":
                           driver= new FirefoxDriver();
                            break;
                        case "ie":
                            driver= new InternetExplorerDriver(new InternetExplorerOptions { Proxy = null });
                            break;
                        default:
                        case "":
                           throw new Exception("Browser cannot be null");
                    }
                }
                return driver;
            }
        }
    }
    

    [/pre]

    您可以将当前代码(用于测试和初始化浏览器)粘贴到您的问题中吗?可以。我使用了你的第一个建议,上面的问题就解决了。但是现在它在LoadApplication()函数“Driver.Url=Url;”上失败了,我得到了一条错误消息:“参数‘Url’不能为null。”当调用的station为:BrowserFactory.LoadApplication(ConfigurationManager.AppSettings[”)时,你能帮我一下吗?顺便问一下,我在这个链接中找到了相同的问题:是否有配置(例如app.config)文件在你的项目中?如果是这样,请在你的帖子中包含该文件的内容。这是正确的解决方案,我使用了与OP相同的代码,知道这些代码有问题,但不知道要准确修复哪个部分。
    public BrowserFactory()
            {
                Driver = new FirefoxDriver();
            }
    
            public static IWebDriver Driver
            {
                get
                {
    
                    return driver;
                }
                private set
                {
                    driver = value;
                }
            }
    
    {
        class Driver
        {
            public enum Browser
            {
                chrome,
                firefox,
                ie,
            }
            public IWebDriver getDriver(string browser_type)
            {
                Browser parsed_browser_type; IWebDriver driver=null;
                bool passed_type = browser_type != null ? true : false;
                if (passed_type)
                {
                    Enum.TryParse(browser_type, out parsed_browser_type);
    
                    switch (browser_type.ToLower())
                    {
    
                        case "chrome":
                           driver= new ChromeDriver(new ChromeOptions { Proxy = null });
                            break;
                        case "firefox":
                           driver= new FirefoxDriver();
                            break;
                        case "ie":
                            driver= new InternetExplorerDriver(new InternetExplorerOptions { Proxy = null });
                            break;
                        default:
                        case "":
                           throw new Exception("Browser cannot be null");
                    }
                }
                return driver;
            }
        }
    }