Запустить один unit test в разных браузерах

Есть тест который нужно проверить в FireFox и Chrome каким образом можно передать эти два браузера в параметры тесту? Или как правильно написать класс для тестирования? Смысл в том что бы не писать два отдельных тест на каждый браузер.

 [TestFixture]
    public class TestsWithMultipleBrowsers
    {
       [Test]
        public void GoToBbcCom_ReturnedSearchFieldStatus()
        {

            var textForSearch = "this";
            //Close pop-up window            
            _driver.FindElement(By.XPath("//button[@class='sign_in-exit']")).Click();

            //Find string for search            
            var bbcSearchInput = _driver.FindElement(By.CssSelector("[placeholder='Search']"));
            if (bbcSearchInput.Displayed && bbcSearchInput.Enabled)
            {
                bbcSearchInput.Click();
            }

            //Writing some text to search
            bbcSearchInput.SendKeys(textForSearch);

            // Click button for starting Search
            _driver.FindElement(By.XPath("//button[@id='orb-search-button']")).Click();
            var textInCurrentSearchLine = _driver.FindElement(By.XPath("//input")).GetAttribute("value");
            var firstUrl = _driver.Url;

            //Click first link                                         
            _driver.FindElement(By.XPath("//a[@class='css-vh7bxp-PromoLink e1f5wbog6'][1]")).Click();
            var urlOfNewPage = _driver.Url;

            Assert.IsTrue(textForSearch == textInCurrentSearchLine);
            Assert.That(urlOfNewPage,Is.EqualTo(true),"You stayed at first page");

        }
}

Делал через обобщенные типы и атрибуты с параметрами. Но думаю есть еще способы

[TestFixture(typeof(FirefoxDriver))]
    [TestFixture(typeof(ChromeDriver))]
    [Category("Cross browser testing")]
    public class TestsWithMultipleBrowsers<TwebDriver> where TwebDriver : IWebDriver, new()
    {
            private IWebDriver _driver;

        [SetUp]
        public void Setup()
        {
            _driver.Manage().Window.Maximize();
            _driver.Navigate().GoToUrl("https://www.bbc.com/");
        }

}


Ответы (2 шт):

Автор решения: Alexander Petrov

Я бы попробовал сделать так:

[TestFixture]
public class TestsWithMultipleBrowsers
{
    [Test]
    [Category("Chrome")]
    public void Chrome_GoToBbcCom_ReturnedSearchFieldStatus()
    {
        GoToBbcCom_ReturnedSearchFieldStatus(new ChromeDriver());
    }

    [Test]
    [Category("Firefox")]
    public void Firefox_GoToBbcCom_ReturnedSearchFieldStatus()
    {
        GoToBbcCom_ReturnedSearchFieldStatus(new FirefoxDriver());
    }

    private void GoToBbcCom_ReturnedSearchFieldStatus(IWebDriver driver)
    {
        driver.Manage().Window.Maximize();
        driver.Navigate().GoToUrl("https://www.bbc.com/");

        // тут остальные действия с драйвером

        // ассёрты
        Assert...
        Assert...
    }
}

Все действия выполняются в методе, который принимает параметр IWebDriver. Обратите внимание: он приватный и без атрибута [Test].

А два тестовых метода вызывают этот метод с нужным параметром драйвера.
Эти методы имеют категорию. Благодаря этому можно запускать тесты только с нужной категорией. По умолчанию, без указания категории, будут запускаться все.

→ Ссылка
Автор решения: Daniil Loban

https://docs.cypress.io очень понравилась эта либа для тестов там есть и выбор браузеров и много чего другого + изначально идут примеры что очень удобно, даже удобнее чем Selenium

установка:

npm install cypress --save-dev

в package.json

  "scripts": {
     ...
     "cypress:open": "cypress open"
  },

при запуске npm run cypress:open откроется окно с тестами и примерами тестов:

скриншот

→ Ссылка