如何在 NUnit 和 C# 中共享一个 Selenium webdriver 实例?

Git*_*ita 5 testing selenium nunit webdriver suite

我想要简单的方法来启动 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;
             }
          }


   }
}
Run Code Online (Sandbox Code Playgroud)

Git*_*ita 3

尝试使用基类/扩展类运行此程序失败。由于 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");
                }
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)