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

我在 Java 中做到了这一点,我创建了一个基类,将 webdriver 声明为静态,将我的启动/配置方法放在这个类中,然后将它扩展到我创建的每个测试类中。

我确定它与 C# 相同。

于 2012-01-03T14:39:33.133 回答
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");
                }
            }
        }

    }
}
于 2012-03-12T15:07:03.210 回答
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();
        }

    }
}

然后从我的测试类中简单地调用“驱动程序”类:

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