5

Selenium webdriver インスタンスを起動し、さまざまなテストを実行する簡単な方法が必要です。Suite ファイルでこれを実行しようとしていますが、うまくいきません。インスタンスは即座に殺されます。これを行う方法の代替手段はありますか?

潜在的に、このスイートにさらにドライバー (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;
             }
          }


   }
}
4

3 に答える 3

3

これが少し遅れたことを感謝しますが、将来の読者にとって役立つかもしれません.

次のように、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();
        }

    }
}

次に、テストクラスから「Driver」クラスを呼び出すだけです。

[TestFixture]
public class IMSLogin : Driver
{
   //.. all the usual bits and bobs!
于 2012-04-12T11:51:46.850 に答える
3

私はJavaでこれを行い、基本クラスを作成し、Webドライバーを静的として宣言し、スタートアップ/構成メソッドをこのクラスに配置してから、作成した各テストクラスに拡張しました.

C#でも同じだと思います。

于 2012-01-03T14:39:33.133 に答える
3

基本クラス/拡張クラスでこれを実行しようとして失敗しました。webdriver インスタンスが適切に初期化されず、適切に強制終了できなかったためです。代わりに、スイートで 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");
                }
            }
        }

    }
}
于 2012-03-12T15:07:03.210 に答える