如何设置为下面的代码的对象的实例?

问题描述:

我要你的帮助,我的问题,请您: 从我的测试类,我尝试运行我的测试代码:如何设置为下面的代码的对象的实例?

[setUp] 
public void setup() 
{ 
BrowserFactory.InitBrowser("Chrome"); 
} 

但是,它失败了,因为它没有初始化的“驱动器”变量。

(我得到了味精信息:System.NullReferenceException:将webdriver的浏览器实例未初始化,您应先调用方法InitBrowser。)

下面InitBrowser(代码)功能,因为我从http://toolsqa.com/selenium-webdriver/c-sharp/browser-factory-or-webdriver-factory/

using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.IE; 
using System; 
using System.Collections.Generic; 

namespace _AutomationTests.WrapperFactory 
{ 
    public class BrowserFactory 
    { 
     private static readonly IDictionary<string, IWebDriver> Drivers = new Dictionary<string, IWebDriver>(); 
     private static IWebDriver driver; 

    public static IWebDriver Driver 
    { 
     get 
     { 
      if (driver == null) 
       throw new NullReferenceException("The WebDriver browser instance was not initialized. You should first call the method InitBrowser."); 
      return driver; 
     } 
     private set 
     { 
      driver = value; 
     } 
    } 

    public static void InitBrowser(string browserName) 
    { 
     switch (browserName) 
     { 
      case "Firefox": 
       if (Driver == null) 
       { 
        driver = new FirefoxDriver(); 
        Drivers.Add("Firefox", Driver); 
       } 
       break; 

      case "IE": 
       if (Driver == null) 
       { 
        driver = new InternetExplorerDriver(@"C:\PathTo\IEDriverServer"); 
        Drivers.Add("IE", Driver); 
       } 
       break; 

      case "Chrome": 
       if (Driver == null) 
       { 
        driver = new ChromeDriver();//@"C:\PathTo\CHDriverServer" 
        Drivers.Add("Chrome", Driver); 
       } 
       break; 
     } 
    } 

    public static void LoadApplication(string url) 
    { 
     Driver.Url = url; 
     driver.Manage().Window.Maximize(); 
     driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()"); 
    } 

    public static void CloseAllDrivers() 
    { 
     foreach (var key in Drivers.Keys) 
     { 
      Drivers[key].Close(); 
      Drivers[key].Quit(); 
     } 
    } 
} 
复制

}

非常感谢!

+0

你可以将你当前的代码(用于测试和InitBrowser)粘贴到你的问题中吗? – mjwills

+0

是的。我使用你的第一个建议,并解决了上述问题。但现在它失败了LoadApplication()函数,“Driver.Url = url;”,我得到了这个错误信息:“参数'url'不能为空。”当被调用的语句是:BrowserFactory.LoadApplication(ConfigurationManager.AppSettings [“https://www.google.co.il/webhp?tab=ow&authuser=0&ei=Tnk2WZmXFMP7-AGGhIvwBQ&ved=0EKkuCAQoAQ”]); 你能帮我吗? –

+0

顺便说一下,我发现在这个链接相同的Q:[链接](https://stackoverflow.com/questions/41104389/selenium-webdriver-the-webdriver-browser-instance-was-not-initialized-when-usin ) –

代码中存在一个错误。

您应该更改这些行:

if (Driver == null)

这样:

if (driver == null)

另一种方法是从一开始发生变化:

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

到:

get 
    { 
     return driver; 
    } 
+1

这是正确的解决方案,我采用与OP相同的代码,并且知道这些是错误的,但不知道哪个部分要完全修复。 – Raimonds

3月,尝试粘贴项目的完整源代码。项目中的ChromeDriver(),FirefoxDriver(),InternetExplorerDriver()的C#类在哪里?你有预先编码吗? 这里IWebDriver驱动程序是一个属性,而类是在静态初始化加载

空检查是不是在公共静态IWebDriver驱动

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

     public static IWebDriver Driver 
     { 
      get 
      { 

       return driver; 
      } 
      private set 
      { 
       driver = value; 
      } 
     } 

IWebDriver驱动器的属性设置为一个实例的吸气所需或构造函数如:

甚至在驱动程序可以被初始化之前,调用get属性来评估空值检查为真&,从而抛出异常。

问题要问自己:

  1. 您已经添加库文件为火狐,Chrome & IE?
  2. 它是你的项目配置文件的一部分吗?
  3. 如果没有添加,添加的最佳方式是在Visual Studio中使用Nuget包管理器 4.这些引用应该是您项目的一部分。让我发布一个类似项目的屏幕截图,我试过 References to library files 5.查看Nuget Package Manager的图片 Click Manage Nuget Packages 6。单击管理的NuGet软件包,浏览可用的软件包

  4. 最后,你不设置驱动器的新实例

[上一页]

{ 
    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; 
     } 
    } 
} 

[/预]