在具有基类的多个浏览器中运行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