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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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# 在尝试并行运行测试时,如何正确传递webdriver?_C#_Selenium_Selenium Webdriver_Nunit 3.0 - Fatal编程技术网

C# 在尝试并行运行测试时,如何正确传递webdriver?

C# 在尝试并行运行测试时,如何正确传递webdriver?,c#,selenium,selenium-webdriver,nunit-3.0,C#,Selenium,Selenium Webdriver,Nunit 3.0,我的工作任务是编写一个自动化框架,该框架包含带有c#/nunit的selenium webdriver。我们目前正在使用nunit 3.0。我最初的想法是提取足够多的框架内容,这样使用框架的团队就不必担心诸如设置/删除webdriver之类的问题 我们决定使用一个测试助手类,该类有一个setup/teardown,可以根据配置设置(chrome、ie等)实例化驱动程序,然后在每次测试后将其拆下。我们还添加了一个受保护的类驱动程序变量,该变量在调用安装程序时设置。这样,每个测试类都可以扩展Test

我的工作任务是编写一个自动化框架,该框架包含带有c#/nunit的selenium webdriver。我们目前正在使用nunit 3.0。我最初的想法是提取足够多的框架内容,这样使用框架的团队就不必担心诸如设置/删除webdriver之类的问题

我们决定使用一个测试助手类,该类有一个setup/teardown,可以根据配置设置(chrome、ie等)实例化驱动程序,然后在每次测试后将其拆下。我们还添加了一个受保护的类驱动程序变量,该变量在调用安装程序时设置。这样,每个测试类都可以扩展TestHelper,并且可以免费获得驱动程序

当我们不并行运行测试时,这种方法非常有效,但当我们开始并行测试时,驱动程序每次都会被覆盖(这很有意义)

我的问题是,有没有更好的方法可以做到这一点,这样就可以保持在TestHelper中提供驱动程序的原始想法,并将大量的驱动程序操作排除在测试之外。我真的不想在每个测试中都有驱动程序声明/初始化,只想保留测试套件来测试特定的代码

下面是一些类似于正在发生的事情的测试类(我实际上无法发布生产代码,因为这方面的工作很有趣):

这是我的测试助手类:

using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace AutomationTest
{
    class TestHelper
    {

        protected IWebDriver driver;

        [SetUp]
        public void startBrowser()
        {
            driver = new ChromeDriver("C:\\Users\\james\\Desktop");
        }

        [TearDown]
        public void closeBrowser()
        {
            driver.Close();
            driver.Quit();
        }
    }
}
这是我的测试类(8个测试只是为了测试并行测试):

使用NUnit.Framework;
名称空间自动测试
{
类TestHelper
{
//受保护的IWebDriver;
受保护的无效浏览(操作)
{
var driver=new ChromeDriver(“C:\\Users\\james\\Desktop”);
行动(司机);
driver.Close();
driver.Quit();
}
[设置]
公共无效startBrowser()
{
//驱动程序=新的ChromeDriver(“C:\\Users\\james\\Desktop”);
}
[撕裂]
公共浏览器()
{
//driver.Close();
//driver.Quit();
}
}
[测试夹具]
[可并行化(ParallelScope.All)]
类ParallelTest:TestHelper
{
[测试]
公共void test1()
{   
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
[测试]
公共无效测试2()
{   
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
[测试]
公共无效测试3()
{     
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
[测试]
公共无效测试4()
{     
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
[测试]
公共无效测试5()
{       
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
[测试]
公共无效测试6()
{     
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
} 
[测试]
公共无效测试7()
{     
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
[测试]
公共无效测试8()
{     
浏览((驱动程序)=>{
driver.Navigate().gotour(“http://www.google.com");
AreEqual(driver.Title,“Google”,“东西没用”);
});
}
}
}

这将为每个测试实例化一个新的驱动程序,这很好,因为您需要单独的浏览器驱动程序和浏览器实例,以便您的测试能够并行运行且不受干扰。

谢谢Cosmin!我正在尝试测试它,它在叫喊,因为Browse方法没有返回任何东西。我遗漏了什么吗?太好了,谢谢你,先生:)一旦我弄明白怎么做,我会把它标记为已回答。你真的要在一个方法调用中放入100行测试代码吗?这将是调试的噩梦,等等。什么方法有100行?我将它分为两个类:测试助手类和实际的测试套件类。如果使用页面对象模型,测试代码将分布在页面对象中,测试方法将包含主编排流。您可以进一步将其抽象为步骤/场景类,并将顶层代码减少到只调用特定测试场景的几行代码。简言之,你不必把所有的东西都写在动作中。
using NUnit.Framework;

namespace AutomationTest 
{
    [TestFixture]
    [Parallelizable(ParallelScope.All)]
    class ParallelTest : TestHelper
    {
        [Test]
        public void test1()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test2()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test3()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test4()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test5()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test6()
        {           
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        } 

        [Test]
        public void test7()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        }

        [Test]
        public void test8()
        {            
            driver.Navigate().GoToUrl("http://www.google.com");
            Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");   
        }
    }
}
using NUnit.Framework;

namespace AutomationTest 
{
class TestHelper
{

    //protected IWebDriver driver;
    protected void Browse(Action<IWebDriver> action)
    {
      var driver = new ChromeDriver("C:\\Users\\james\\Desktop");
      action(driver);
      driver.Close();
      driver.Quit();
    }
    [SetUp]
    public void startBrowser()
    {
        // driver = new ChromeDriver("C:\\Users\\james\\Desktop");
    }

    [TearDown]
    public void closeBrowser()
    {
        // driver.Close();
        // driver.Quit();
    }
}

[TestFixture]
[Parallelizable(ParallelScope.All)]
class ParallelTest : TestHelper
{
    [Test]
    public void test1()
    {   
        Browse( (driver) => {         
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test2()
    {   
        Browse( (driver) => {                  
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test3()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test4()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test5()
    {       
        Browse( (driver) => {              
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test6()
    {     
        Browse( (driver) => {               
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    } 

    [Test]
    public void test7()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
        });
    }

    [Test]
    public void test8()
    {     
        Browse( (driver) => {                
          driver.Navigate().GoToUrl("http://www.google.com");
          Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");   
        });
    }
}
}