使用基类在多个浏览器中运行Selenium测试

4

假设我有以下代码:

namespace SeleniumTests 
{
    [TestFixture(typeof(FirefoxDriver))]
    [TestFixture(typeof(InternetExplorerDriver))]
    public class TestWithMultipleBrowsers<TWebDriver> 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();
        }
    }
}

I want block

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

移到基类。但我不知道在这种情况下应该如何继承自基类。我该如何处理 <TWebDriver> where TWebDriver: IWebDriver, new ()


好问题,但我将[SetUp]视为一个单元测试的构造函数。我的做法非常类似,但不是在[SetUp]中创建新实例,而是调用一个静态方法,该方法接受一个泛型IWebDriver并进行大量设置,例如连接到Selenium GRID服务器,设置窗口大小等。 - Jamie Rees
1个回答

5

这个例子没有使用泛型,而是类似于依赖注入的方式。

您需要一个方法来创建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);
}

你可以继承这个类:
public class TestWithMultipleBrowsers : DriverFactory

1
感谢回复。但是这个解决方案是否允许您立即在多个浏览器上运行单个测试?确实,这正是[TestFixture(typeof(ChromeDriver))] [TestFixture(typeof(InternetExplorerDriver))] [TestFixture(typeof(FirefoxDriver))]所能做的。 但我不明白如何在基类中初始化推送。 - BCR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接