2012-01-03 14 views
4

Selenium webdriverインスタンスを簡単に起動し、さまざまなテストを実行したいと思います。スイートファイルでこれをやろうとしていますが、うまくいきません。インスタンスは即座に殺されます。これを行う方法の選択肢はありますか?NUnitとC#でSelenium webdriverインスタンスを共有するにはどうしたらいいですか?

このスイートにはさらにドライバ(IE、Chrome)を追加し、可能であれば個別に起動したいと考えています。どんな提案も大歓迎です。

namespace NUnit.Tests 
{ 
    public class AllTests 
    { 
     private static IWebDriver _Driver; 

     [TestFixtureSetUp] 
     public void SuiteSetUp() 
     { 
      _Driver = new FirefoxDriver(); 
     } 

     [TestFixtureTearDown] 
     public void SuiteTearDown() 
     { 
      try 
      { 
       _Driver.Quit(); 
      } 
       catch (Exception) 
      { 
        // Ignore errors if unable to close the browser 
      } 
     } 

     [Suite] 
     public static TestSuite Suite 
     { 
      get 
      { 
       LoginTest lt = new LoginTest { Driver=_Driver }; 
       suite.Add(lt); 
       AnotherTest at = new AnotherTest { Driver=_Driver }; 
       suite.Add(at); 
       return suite; 
      } 
      } 


    } 
} 

答えて

2

これを基本クラス/拡張クラスで実行しようとして失敗しました。 Webdriverのインスタンスが正しく初期化されず、正しく殺されなかったためです。代わりに、私はSuiteでSetupIE()、SetupChrome()、SetupFirefox()メソッドを作成し、スイートの最後のテストとして機能するティアダウンメソッドを作成しました。

namespace TestNamespace 
{ 
    using System; 
    using NUnit.Framework; 
    using NUnit.Core; 
    using SeleniumTests; 
    using OpenQA.Selenium; 
    using OpenQA.Selenium.IE; 
    using OpenQA.Selenium.Firefox; 
    using OpenQA.Selenium.Chrome; 
    using OpenQA.Selenium.Support.UI; 

    class AllTests 
    { 
     public static IWebDriver WebDriver { get; private set; } 

     [Suite] 
     public static TestSuite Suite 
     { 
      get 
      { 
       TestSuite suite = new TestSuite("All Tests"); 

       //Setup a Web driver (see methods below for different browsers) - SetupIE(), SetupChrome(), SetupFirefox() 
       SetupIE(); 

       // Add tests to suite 
       suite.Add(new FlashLoadedTest { Driver = WebDriver }); 

       // Tear down a Web driver 
       suite.Add(new TearDownTest { DriverToTearDown = WebDriver }); 

       // return suite to NUnit 
       return suite; 
      } 
     } 

     // Method that's initialises FireFox Driver 
     private static void SetupFireFox() 
     { 
      WebDriver = new FirefoxDriver(); 
     } 

     // Method that's initialises IE Driver 
     private static void SetupIE() 
     { 
      WebDriver = new InternetExplorerDriver(); 
     } 


     // Can't get this working, but this is how its supposed to work 
     private static void SetupChrome() 
     { 
      WebDriver = new ChromeDriver(@"C:\Users\<user>\AppData\Local\Google\Chrome\Application"); 
     } 


     // Class with a test that tears down browser instance 
     [TestFixture] 
     class TearDownTest 
     { 
      public IWebDriver DriverToTearDown; 

      [Test] 
      public void TearDownBrowser() 
      { 
       if (DriverToTearDown == null) 
        Assert.Fail("No Browser to Tear Down"); 

       try 
       { 
        DriverToTearDown.Close(); 
        DriverToTearDown.Dispose(); 
       } 
       catch 
       { 
        Assert.Fail("Browser failed to tear down"); 
       } 
      } 
     } 

    } 
} 
2

私はJavaでこれをしなかった、私は、基本クラスを作っwebdriverをを静的に宣言、このクラスでは、私の起動/設定方法を配置し、私が作った各テストクラスにそれを拡張しました。

確かにC#と同じです。

+0

私はそれをしようとします。この場合、異なるブラウザを並行して起動する方法はありますか? – Gita

+0

私はTestNGを使用しましたが、パラメータ化された変数機能を使用してさまざまなブラウザを実行しました。 また、パラレル実行のオプションもあります。 申し訳ありませんが、NUnitに精通していません。 – MostWanted

+0

これを基本クラスと拡張クラスで試した後、動作しませんでした。そこで私はSuiteで別々のテストを作成して、ブラウザを設定して解体しました。スイートに最初/最後に追加し、魔法のように機能しました。コメントありがとう。 – Gita

2

私はこれを高く評価少し遅れているが、将来の読者のために有用であることを証明し得る:ここで

は、コードがあります。

私は、次のものを含むfirefoxドライバを含む基本クラスを作成しました。これは完全に機能します。派生したテストクラスから基本クラス(このインスタンスのDriver)を単純に参照できます。私はC#とNunitを使っています。

基底クラスのコードがされています。そして、単に私のテストクラスから 'ドライバ' と呼ばれるクラス

namespace yournamespace 
{ 
    public class Driver 
    { 
     public IWebDriver driver; 
     public StringBuilder verificationErrors; 

     public Driver() 
     { 
      driver = new FirefoxDriver(); //replace with required driver 
      verificationErrors = new StringBuilder(); 
     } 

    } 
} 

[TestFixture] 
public class IMSLogin : Driver 
{ 
    //.. all the usual bits and bobs! 
関連する問題