Запуск тестов Selenium в нескольких браузерах один за другим с C # NUnit

Я ищу рекомендуемый / лучший способ, чтобы тесты Selenium выполнялись в нескольких браузерах один за другим. Веб-сайт, который я тестирую, невелик, поэтому мне не требуется параллельное решение.

У меня есть обычные методы настройки теста с помощью [SetUp] , [TearDown] и [Test] . Разумеется, SetUp one создает экземпляр нового объекта ISelenium с любым браузером, с которым я хочу протестировать.

Итак, что я хочу сделать, это программно сказать: этот тест будет запускаться в браузерах Chrome, IE и Firefox. Как мне это сделать?

РЕДАКТИРОВАТЬ:

Это может немного помочь. Мы используем CruiseControl.NET для запуска тестов NUnit после успешной сборки. Есть ли способ передать параметр в исполняемый файл NUnit, а затем использовать этот параметр в тесте? Таким образом, мы могли бы запускать NUnit несколько раз с разными параметрами браузера.

NUnit 2.5+ теперь поддерживает Generic Test Fixures, которые делают тестирование в нескольких браузерах очень простым. http://www.nunit.org/index.php?p=testFixture&r=2.5

Выполнение следующего примера будет выполнять GoogleTest два раза, один раз в Firefox и один раз в IE.

 using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.IE; using System.Threading; namespace SeleniumTests { [TestFixture(typeof(FirefoxDriver))] [TestFixture(typeof(InternetExplorerDriver))] public class TestWithMultipleBrowsers where TWebDriver : IWebDriver, new() { private IWebDriver driver; [SetUp] public void CreateDriver () { this.driver = new TWebDriver(); } [Test] public void GoogleTest() { driver.Navigate().GoToUrl("http://www.google.com/"); IWebElement query = driver.FindElement(By.Name("q")); query.SendKeys("Bread" + Keys.Enter); Thread.Sleep(2000); Assert.AreEqual("bread - Google Search", driver.Title); driver.Quit(); } } } 

Это повторяющийся вопрос и решается несколькими способами:

  1. Заводский метод создает объект ISelenium. У вас есть вспомогательный class со статическим методом getSelenium. Этот метод читает в некоторой внешней конфигурации, которая имеет свойство, которое определяет браузер, который вы хотите как строку. В вашем getSelenium вы затем соответствующим образом настроите браузер. вот удобная статья об использовании конфигурационных файлов с NUnit http://blog.coryfoy.com/2005/08/nunit-app-config-files-its-all-about-the-nunit-file/

  2. Другие имеют успех с вводом браузера через контейнер IoC. Мне это очень нравится, потому что TestNG отлично работает с Guice на Java, но я не уверен, насколько легко смешивать NUnit и Ninject, MEF и т. Д.

Это в основном просто расширение ответа аланинга (21 октября 2011 года в 20:20). Мой случай был похож, просто я не хотел запускаться с безпараметровым конструктором (и, таким образом, использовать путь по умолчанию к исполняемым файлам драйвера). У меня была отдельная папка с драйверами, которые я хотел протестировать, и это, похоже, хорошо работает:

 [TestFixture(typeof(ChromeDriver))] [TestFixture(typeof(InternetExplorerDriver))] public class BrowserTests where TWebDriver : IWebDriver, new() { private IWebDriver _webDriver; [SetUp] public void SetUp() { string driversPath = Environment.CurrentDirectory + @"\..\..\..\WebDrivers\"; _webDriver = Activator.CreateInstance(typeof (TWebDriver), new object[] { driversPath }) as IWebDriver; } [TearDown] public void TearDown() { _webDriver.Dispose(); // Actively dispose it, doesn't seem to do so itself } [Test] public void Tests() { //TestCode } } 

}

Я использую список драйверов IWeb для выполнения тестов во всех браузерах, строка за строкой:

 [ClassInitialize] public static void ClassInitialize(TestContext context) { drivers = new List(); firefoxDriver = new FirefoxDriver(); chromeDriver = new ChromeDriver(path); ieDriver = new InternetExplorerDriver(path); drivers.Add(firefoxDriver); drivers.Add(chromeDriver); drivers.Add(ieDriver); baseURL = "http://localhost:4444/"; } [ClassCleanup] public static void ClassCleanup() { drivers.ForEach(x => x.Quit()); } ..and then am able to write tests like this: [TestMethod] public void LinkClick() { WaitForElementByLinkText("Link"); drivers.ForEach(x => x.FindElement(By.LinkText("Link")).Click()); AssertIsAllTrue(x => x.PageSource.Contains("test link")); } 

где я пишу свои собственные методы WaitForElementByLinkText и AssertIsAllTrue для выполнения операции для каждого драйвера и где что-то не удается, вывести сообщение, помогающее мне определить, какие из браузеров (ов) могли быть неудачными:

  public void WaitForElementByLinkText(string linkText) { List failedBrowsers = new List(); foreach (IWebDriver driver in drivers) { try { WebDriverWait wait = new WebDriverWait(clock, driver, TimeSpan.FromSeconds(5), TimeSpan.FromMilliseconds(250)); wait.Until((d) => { return d.FindElement(By.LinkText(linkText)).Displayed; }); } catch (TimeoutException) { failedBrowsers.Add(driver.GetType().Name + " Link text: " + linkText); } } Assert.IsTrue(failedBrowsers.Count == 0, "Failed browsers: " + string.Join(", ", failedBrowsers)); } 

IEDriver мучительно медленный, но у этого будут 3 основных браузера, которые запускают тесты «бок о бок»,

Хорошо, одно решение состоит в том, чтобы иметь тесты оболочки, которые устанавливают объект ISelenium с разными браузерами. Затем они передают этот объект всем другим тестам, которые используют его вместо того, чтобы создавать новый, как это было ранее.

Недостатком является то, что я заканчиваю одним большим испытанием для каждого браузера. Не лучшее решение. Все еще смотрящий…

РЕДАКТИРОВАТЬ:

Потратил еще немного времени на это. Решение, которое я придумал, – это иметь текстовый файл в решении, который указывает браузер, который будет использоваться для тестирования. NUnit выбирает параметр при создании объекта Selenium.

Я использую CruiseControl.NET для запуска автоматических сборок и тестов. И вместо того, чтобы просто запустить тест один раз, я настроил его для запуска их дважды. Но перед каждым тестом я запускаю команду командной строки, которая меняет браузер в текстовом файле конфигурации.

  cmd /C echo firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe > F:\...\selenium_browser.txt   F:\...\NUnit 2.5.7\bin\net-2.0\nunit-console.exe F:\...\bin\Debug F:\...\...nunit /xml:"F:\CCXmlLog\Project\nunit-results.xml" /noshadow 0 1200   cmd /C echo googlechrome C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe > F:\...\selenium_browser.txt   F:\...\NUnit 2.5.7\bin\net-2.0\nunit-console.exe F:\...\bin\Debug F:\...\...nunit /xml:"F:\CCXmlLog\Project\nunit-results.xml" /noshadow 0 1200  

Это помогло мне решить аналогичную проблему. Как запустить набор тестов nUnit с двумя разными настройками?

Просто установите различные браузеры в методе настройки:]

Мне было интересно узнать о той же проблеме, и, наконец, я получил решение

Поэтому, когда вы устанавливаете плагин, вы можете контролировать, в каком браузере должен быть протестирован сценарий.

Пример функции:

 @Browser:IE @Browser:Chrome Scenario Outline: Add Two Numbers Given I navigated to / And I have entered  into summandOne calculator And I have entered  into summandTwo calculator When I press add Then the result should be  on the screen Scenarios: | SummandOne | SummandTwo | Result | | 50 | 70 | 120 | | 1 | 10 | 11 | 

Реализация

 [Given(@"I have entered '(.*)' into the commentbox")] public void GivenIHaveEnteredIntoTheCommentbox(string p0) { Browser.Current.FindElement(By.Id("comments")).SendKeys(p0); } 

Больше информации

Должен быть лучший способ, но вы можете использовать шаблоны T4 для создания повторяющихся тестовых classов для каждого браузера – по существу, автоматизацию копирования и вставки тестов для каждого браузера.

  • Где я могу найти окончательный Selenium WebDriver для Матрицы совместимости Firefox?
  • Получение текста из узла
  • Исключение StaleElementReference в PageFactory
  • Ввод ввода / возврата в Selenium
  • Как использовать Selenium в C #?
  • Как получить selenium, чтобы ждать ответа ajax?
  • pageLoadTimeout в Selenium не работает
  • Как перейти на новую веб-страницу в Selenium?
  • Как я могу подключиться к браузеру, открытому webdriver с seleniumом?
  • Имя пользователя и пароль аутентификации Windows Python не работает
  • Selenium WebDriver очень медленно печатает в текстовом поле в браузере IE
  • Давайте будем гением компьютера.