Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用基类在多个浏览器中运行Selenium测试_C#_Selenium_Nunit - Fatal编程技术网

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

C# 使用基类在多个浏览器中运行Selenium测试,c#,selenium,nunit,C#,Selenium,Nunit,假设我有代码: namespace SeleniumTests { [TestFixture(typeof(FirefoxDriver))] [TestFixture(typeof(InternetExplorerDriver))] public class TestWithMultipleBrowsers<TWebDriver> where TWebDriver : IWebDriver, new() { private IWebD

假设我有代码:

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

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

这并不像您的示例那样使用泛型,而是像依赖注入一样工作

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

谢谢你的回复。但是这个解决方案是否允许您立即在多个浏览器上运行单个测试?事实上,这正是允许您执行[TestFixture(typeof(ChromeDriver))][TestFixture(typeof(InternetExplorerDriver))][TestFixture(typeof(FirefoxDriver))]的功能,但我不理解如何在基类中初始化push。这是一个好问题,但我几乎把
[SetUp]
看作是一个单元测试构造函数。我所做的非常类似,但不是在
[SetUp]
中创建新实例,而是调用一个静态方法,该方法接受一个通用的
IWebDriver
,并执行许多设置,如连接到Selenium网格服务器、设置窗口大小等。
public class TestWithMultipleBrowsers : DriverFactory