2017-06-04 9 views
-1

が、私は私の問題にあなたの助けをしたい、してください:それは「ドライバ」の変数を初期化していなかったので、それは、失敗した、以下のコードでオブジェクトのインスタンスを設定する方法は?

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

しかし:私のテストクラスから は、私は私のテストコードを実行してみてください。

(私はMSG得た: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'はnullにはなりません。呼び出されたステートメントが次の場合:BrowserFactory.LoadApplication(ConfigurationManager.AppSettings ["https://www.google.co.il/webhp?tab=ow&authuser=0&ei=Tnk2WZmXFMP7-AGGhIvwBQ&ved=0EKkuCAQoAQ"]); あまりにも手伝ってもらえますか? –

+0

ところで、私はこのリンクで同じQを見つけました:[link](https://stackoverflow.com/questions/41104389/selenium-webdriver-the-webdriver-browser-instance-was-not-initialized-when-usin ) –

答えて

1

コードにバグがあります。

あなたはこれらの線のそれぞれ変更する必要があります。これに

if (Driver == null)

if (driver == null)

別のオプションからGETを変更することです:に

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

0

3月、あなたのプロジェクトの完全なソースコードを貼り付けてみてください。プロジェクトのChromeDriver()、FirefoxDriver()、InternetExplorerDriver()のC#クラスはどこにありますか。それらを前もってコード化しましたか?ここで IWebDriverドライバクラスは静的初期化子にロードされている間

ヌルチェックがインスタンスにIWebDriverドライバのプロパティを設定し、パブリック静的IWebDriverドライバ

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

     public static IWebDriver Driver 
     { 
      get 
      { 

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

のゲッターで必要とされていないプロパティです

ドライバが初期化される前であっても、nullチェックをtrueに評価して例外をスローするgetプロパティが呼び出されます。自分自身に尋ねべき

質問:

  1. あなたは、Firefox、クロム& IE用のライブラリファイルを追加した??
  2. プロジェクト構成ファイルの一部ですか?
  3. 追加しない場合は、ビジュアルスタジオのNuget Package Managerを使用して追加することをお勧めします。 4.プロジェクトの一部である必要があります。私が試した同様のプロジェクトのスクリーンショットを投稿させてください。 References to library files 5. Nugetパッケージマネージャの画像を参照してください。 Click Manage Nuget Packages 6。、あなたはドライバーの新しいインスタンスを設定していない利用可能なパッケージ最後に7. Install Nuget Package

  4. を参照し、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; 
     } 
    } 
} 

[/中古】

関連する問題