рекомендую важное изменение на решение Люцифера. Имейте атрибут поставлять фабрику, а не драйвер, методам Fact/Theory. Зачем? Ну, когда вы увидите всплывающие окна всех этих браузеров (n x m, где n = количество тестов, m = браузер за каждый тест), вы решите, что хотите, чтобы они были созданы только тогда, когда тест бежать.
Так с обновлениями от предыдущего решения, в том числе некоторых изменений имени ...
using OpenQA.Selenium;
using SeleniumPageObjectsPatternExample.Attributes;
using SeleniumPageObjectsPatternExample.PageObjects;
using Xunit;
using Xunit.Extensions;
namespace SeleniumHelpers
{
public class HomepageTests
{
[Theory]
[WebDriver(DriverType.Firefox)]
[WebDriver(DriverType.GoogleChrome)]
public void HomepageLinksToBlogPage(WebDriverFactory factory)
{
// arrange
IWebDriver webDriver = factory.Create(); // Browser starts here.
var expected = "some expected value";
// act
var homepage = new HomePage(webDriver, true);
// assert
Assert.True(homepage.BlogLink.Displayed);
Assert.Equal(expected, homepage.Header.Text);
// Optional cleanup (better wrapped in try/finally for entire method).
webDriver.Quit();
webDriver.Dispose();
}
}
}
Обновлено DataAttribute ... (Обратите внимание, я исправил подпись метода GetData() для работы с последним XUnit.)
using System.Reflection;
using OpenQA.Selenium;
using Xunit.Extensions;
namespace SeleniumHelpers
{
public class WebDriverAttribute : DataAttribute
{
private WebDriverFactory WebDriverFactory { get; set; }
public WebDriverAttribute(Type browser)
{
this.WebDriver = WebDriverFactory.Create(browser);
}
public override IEnumerable<object[]> GetData(MethodInfo methodUnderTest)
{
return new[] { new[] { this.WebDriverFactory } };
}
}
}
новый WebDriverFactory
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
namespace SeleniumHelpers
{
public enum DriverType
{
Firefox,
GoogleChrome
}
public class WebDriverFactory
{
private DriverType _driverType;
public WebDriverFactory(DriverType driverType)
{
_driverType = driverType;
}
public static IWebDriver Create(Type browser)
{
IWebDriver webDriver;
switch (browser)
{
case Type.Firefox:
webDriver = new FirefoxDriver();
break;
case Type.GoogleChrome:
webDriver = new ChromeDriver();
break;
default:
webDriver = new ChromeDriver();
break;
}
webDriver.Manage().Window.Maximize();
return webDriver;
}
}
}