在具有基类的多个浏览器中运行Selenium测试

假设我有代码:

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(); } } } 

我想阻止

  [SetUp] public void CreateDriver () { this.driver = new TWebDriver(); } 

转移到基类。 但我不知道在这种情况下如何从基类inheritance。 如何处理 where TWebDriver: IWebDriver, new ()

这不像你的例子那样使用generics,而是像dependency injection那样工作。

您需要一种方法来创建webdriver的实例。

 public class DriverFactory { public IWebDriver Driver { get; set; } public enum DriverType { IE, Firefox, Chrome } public IWebDriver GetDriver(DriverType typeOfDriver) { if (typeOfDriver == DriverType.IE) return new InternetExplorerDriver(); if (typeOfDriver == DriverType.Chrome) return new ChromeDriver(); return new FirefoxDriver(); // return firefox by default } } 

然后从你的设置打电话:

 [Setup] public void CreateDriver() { var driverFactory = new DriverFactory(); this.driver = driverFactory.GetDriver(DriverType.Chrome); } 

您可以inheritance该类:

 public class TestWithMultipleBrowsers : DriverFactory