vi consiglio una variazione importante soluzione di Lucifero. L'attributo fornisce una fabbrica, non un driver, ai metodi Fact/Theory. Perché? Bene, quando vedi tutte quelle finestre del browser pop-up (n x m, dove n = numero di test, m = browser per test), decidi che vuoi solo che vengano creati quando il test sta effettivamente andando correre.
Quindi, con gli aggiornamenti da soluzione prima, tra cui alcuni cambi di nome ...
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();
}
}
}
Aggiornato DataAttribute ... (Nota, ho corretto la firma del metodo GetData() per lavorare con l'ultima 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 } };
}
}
}
Il nuovo 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;
}
}
}
fonte
2015-08-25 08:42:34