Как я могу поделиться одним экземпляром Selenium Webdriver в NUnit и C #? - PullRequest
4 голосов
/ 03 января 2012

Мне нужен простой способ запустить экземпляр веб-драйвера Selenium и запустить на нем различные тесты.Я пытаюсь сделать это в файле 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;
             }
          }


   }
}

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Попытка запустить это с базовым классом / расширенными классами не удалась. Поскольку экземпляр 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 голосов
/ 12 апреля 2012

Я ценю, что это немного поздно, но может оказаться полезным для будущих читателей.

Я создал базовый класс, содержащий драйвер 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!
2 голосов
/ 03 января 2012

Я сделал это на Java, я создал базовый класс, объявил веб-драйвер статическим, поместил свои методы запуска / настройки в этот класс и затем расширил его до каждого тестового класса, который я создал.

Я уверен, что то же самое для C #.

...