Запустить один 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 шт):
Я бы попробовал сделать так:
[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].
А два тестовых метода вызывают этот метод с нужным параметром драйвера.
Эти методы имеют категорию. Благодаря этому можно запускать тесты только с нужной категорией. По умолчанию, без указания категории, будут запускаться все.
https://docs.cypress.io очень понравилась эта либа для тестов там есть и выбор браузеров и много чего другого + изначально идут примеры что очень удобно, даже удобнее чем Selenium
установка:
npm install cypress --save-dev
в package.json
"scripts": {
...
"cypress:open": "cypress open"
},
при запуске npm run cypress:open откроется окно с тестами и примерами тестов:
