2017-07-18 12 views
0

Chrome WebDriverを使用して、C#.NETでSelenium 3.4.0を使用してテキストを処理しています。私はテストを実行するブラウザを処理するラッパーを持っています。これを実行すると、どちらのブラウザーも初期化されません。Selenium with Wrappersを使用してChrome WebDriveを使用するにはどうすればよいですか?

エラー:(ドライバー=ヌルそれが明示的にlogintextから設定されています。つまり、私のbrowserfactoryファイルから)

Message: System.NullReferenceException : The WebDriver browser instance was not initialized. You should first call the method InitBrowser. 

LoginTest.cs:

using NUnit.Framework; 
using qa.PageObjects; 
using qa.WrapperFactory; 
using System.Configuration; 

namespace qa.TestCases 
{ 
    class LoginTest 
    { 

     [Test] 
     public void Test() 
     { 
      // Sign in through google first, so we don't have to follow new tabs 
      BrowserFactory.InitBrowser("Chrome"); 
      BrowserFactory.LoadApplication(ConfigurationManager.AppSettings["URL"]); 

      Page.Login.ClickOnMyAccount(); 
      Page.Login.LoginToGoogle(); 

      BrowserFactory.CloseAllDrivers(); 
     } 
    } 
} 

BrowserFactory.cs:

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

namespace qa.WrapperFactory 
{ 
    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 "Chrome": 
        if (Driver == null) 
        { 
         driver = new ChromeDriver(); 
         Drivers.Add("Chrome", Driver); 
        } 
        break; 
      } 
     } 

     public static void LoadApplication(string url) 
     { 
      Driver.Url = url; 
     } 

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

答えて

1

ドライバが初期化される前に、エラーがスローされています。ドライバーはInitBrowser(ここで呼び出されます

)...

case "Chrome": 
      if (Driver == null) 

この問題を解決するために、この文を実行し、プライベート変数のドライバがnullされます...

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; 

一つの方法プライベートドライバ変数が初期化時にnullであるかどうかをチェックすることです。

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

      case "Chrome": 
       if (driver == null) 
       { 
        driver = new ChromeDriver(); 
        Drivers.Add("Chrome", Driver); 
       } 
       break; 
     } 
    } 
関連する問題