Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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/2/ssis/2.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# 使用C在多个浏览器中运行Selenium测试#_C#_Selenium_Selenium Webdriver - Fatal编程技术网

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

C# 使用C在多个浏览器中运行Selenium测试#,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我有一个方法可以创建2个远程web驱动程序。一个使用chrome,另一个使用firefox: Driver.cs public class Driver { public static IWebDriver Instance { get; set; } public static void Initialize() { DesiredCapabilities[] browsers = {DesiredCapabilities.Firefox(),De

我有一个方法可以创建2个远程web驱动程序。一个使用chrome,另一个使用firefox:

Driver.cs

 public class Driver
{

    public static IWebDriver Instance { get; set; }

    public static void Initialize()
    {
        DesiredCapabilities[] browsers = {DesiredCapabilities.Firefox(),DesiredCapabilities.Chrome()};
       foreach (DesiredCapabilities browser in browsers)
        {
            if (browser == DesiredCapabilities.Chrome()) 
                {
                var browser = DesiredCapabilities.Chrome();
                System.Environment.SetEnvironmentVariable("webdriver.chrome.driver", "C:/Users/jm/Documents/Visual Studio 2013/Projects/VNextAutomation - Copy - Copy (3)/packages/WebDriverChromeDriver.2.10/tools/chromedriver.exe");
                ChromeOptions options = new ChromeOptions() { BinaryLocation = "C:/Users/jm/AppData/Local/Google/Chrome/Application/chrome.exe" };
                browser.SetCapability(ChromeOptions.Capability, options);
                Console.Write("Testing in Browser: " + browser.BrowserName);

                Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser);

            } else {
               Console.Write("Testing in Browser: "+ browser.BrowserName);
               Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser);
           }   
        }
        Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15));
    }
然后我有一个测试类:

[TestClass]
public class LoginTests
{
    [TestInitialize]
    public void Init()
    {
       Driver.Initialize();
    }

    [TestMethod]
    public void Failed_login()
    {
        LoginPage.GoTo();
        LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login();

        Assert.IsTrue(LoginFail.IsAt, "Login failure is incorrect");
    }


    [TestMethod]
    public void Admin_User_Can_Login()
    {
        LoginPage.GoTo();
        LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login();

        Assert.IsTrue(HomePage.IsAt, "Failed to login.");
    }

    [TestCleanup]
    public void Cleanup()
    {
      Driver.Close();

    }
}
}


问题是当调用Driver.initialize时,它不能同时运行chrome和firefox。我想做的是,当调用Init方法时,它会启动两个浏览器并在每个浏览器中运行测试方法。

我目前的做法是使用NUnit。
[TestFixture(typeof(ChromeDriver))]
[TestFixture(typeof(InternetExplorerDriver))]
[TestFixture(typeof(FirefoxDriver))]

public class LoginTests<TWebDriver> where TWebDriver : IWebDriver, new()
{


[SetUp]
public void Init()
{
   Driver.Initialize<TWebDriver>();
}

[Test]
public void Failed_login()
{
    LoginPage.GoTo();
    LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login();

    Assert.IsTrue(LoginFail.IsAt, "Login failure is incorrect");
}


[Test]
public void Admin_User_Can_Login()
{
    LoginPage.GoTo();
    LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login();

    Assert.IsTrue(HomePage.IsAt, "Failed to login.");
}

[TearDown]
public void Cleanup()
{
  Driver.Close();

}
}
}
我有同样的问题,无法找到一个好的方法来做它与MSTest

我正在做的是:

如您所见,我只是为每个浏览器创建了一个新的TestFixture

[TestFixture(typeof(ChromeDriver))]
[TestFixture(typeof(InternetExplorerDriver))]
[TestFixture(typeof(FirefoxDriver))]

public class LoginTests<TWebDriver> where TWebDriver : IWebDriver, new()
{


[SetUp]
public void Init()
{
   Driver.Initialize<TWebDriver>();
}

[Test]
public void Failed_login()
{
    LoginPage.GoTo();
    LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login();

    Assert.IsTrue(LoginFail.IsAt, "Login failure is incorrect");
}


[Test]
public void Admin_User_Can_Login()
{
    LoginPage.GoTo();
    LoginPage.LoginAs("user").WithPassword("pass").WithDatasource("db").Login();

    Assert.IsTrue(HomePage.IsAt, "Failed to login.");
}

[TearDown]
public void Cleanup()
{
  Driver.Close();

}
}
}
[TestFixture(typeof(ChromeDriver))]
[测试夹具(类型(InternetExplorerDriver))]
[测试夹具(类型(FirefoxDriver))]
公共类登录测试TWebDriver:IWebDriver,new()
{
[设置]
公共void Init()
{
Driver.Initialize();
}
[测试]
public void失败\u登录()
{
LoginPage.GoTo();
LoginPage.LoginAs(“用户”)。带密码(“通过”)。带数据源(“db”)。Login();
Assert.IsTrue(LoginFail.IsAt,“登录失败不正确”);
}
[测试]
public void Admin\u User\u Can\u Login()
{
LoginPage.GoTo();
LoginPage.LoginAs(“用户”)。带密码(“通过”)。带数据源(“db”)。Login();
Assert.IsTrue(HomePage.IsAt,“登录失败”);
}
[撕裂]
公共空间清理()
{
Driver.Close();
}
}
}
驾驶员等级

 public class Driver<TWebDriver> where TWebDriver : IWebDriver, new()
 {

    public static IWebDriver Instance { get; set; }

    public static void Initialize()
    {
        if (typeof(TWebDriver) == typeof(ChromeDriver))
        {


         var browser = DesiredCapabilities.Chrome();
                System.Environment.SetEnvironmentVariable("webdriver.chrome.driver", "C:/Users/jm/Documents/Visual Studio 2013/Projects/VNextAutomation - Copy - Copy (3)/packages/WebDriverChromeDriver.2.10/tools/chromedriver.exe");
                ChromeOptions options = new ChromeOptions() { BinaryLocation = "C:/Users/jm/AppData/Local/Google/Chrome/Application/chrome.exe" };
                browser.SetCapability(ChromeOptions.Capability, options);
                Console.Write("Testing in Browser: " + browser.BrowserName);



                Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser);

            } else {
               Console.Write("Testing in Browser: "+ browser.BrowserName);
               Instance = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), browser);
           }   
        }
        Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15));
    }
}
公共类驱动程序,其中TWebDriver:IWebDriver,new()
{
公共静态IWebDriver实例{get;set;}
公共静态void Initialize()
{
if(类型化(TWebDriver)=类型化(色度驱动))
{
var browser=DesiredCapabilities.Chrome();
System.Environment.SetEnvironmentVariable(“webdriver.chrome.driver”,“C:/Users/jm/Documents/visualstudio 2013/Projects/VNextAutomation-Copy-Copy(3)/packages/WebDriverChromeDriver.2.10/tools/chromedriver.exe”);
ChromeOptions options=new ChromeOptions(){BinaryLocation=“C:/Users/jm/AppData/Local/Google/Chrome/Application/Chrome.exe”};
浏览器.SetCapability(ChromeOptions.Capability,选项);
Console.Write(“在浏览器中测试:“+Browser.BrowserName”);
实例=新的RemoteWebDriver(新Uri(“http://127.0.0.1:4444/wd/hub浏览器);
}否则{
Console.Write(“在浏览器中测试:“+Browser.BrowserName”);
实例=新的RemoteWebDriver(新Uri(“http://127.0.0.1:4444/wd/hub浏览器);
}   
}
Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15));
}
}

我已尝试将其与您的代码相匹配

如果您希望能够指定一个浏览器来临时运行测试,而不是每次都使用TestFixture运行所有浏览器,Richard Bradshaw提供了一个优秀的教程

其想法是使用一个应用程序配置文件(和工厂模式),其中包含浏览器、版本、平台、selenium hub和端口信息(以及网格上的hub/Node实现中可能需要的任何其他数据)等值,并在测试时将其拉入以创建WebDriver实例。然后,您可以在测试之间修改此文件,以便在必要时启动不同类型的WebDriver


我们使用它来按顺序使用NUnit运行测试,它已被证明非常有效。

使用
NUnit的更简单、更直接的解决方案:

名称空间测试
{
//在此处添加要测试的所有浏览器
[测试夹具(类型(FirefoxDriver))]
[测试夹具(ChromeDriver类型))]
公共类技能测试,其中TWebDriver:IWebDriver,new()
{
专用IWebDriver\u驱动程序;
私有字符串驱动路径;
[设置]
公共void Init()
{
_driver=新TWebDriver();
_driver.Navigate().gotour(“https://localhost:5001/");
}
[测试]
公开作废您的测试案例()
{ 
//一些测试逻辑
} 
[撕裂]
公共空间清理()
{
_driver.Quit();
_driver.Dispose();
}
}
}

这太棒了!谢谢你尝试一下。我一会儿就回来。谢谢你,蒂德斯。那很好,如果我有帮助,请随意投票。如果您有任何问题,请告诉我,以便我可以提供帮助。@JamieRees它允许您执行并行执行还是仅按顺序执行?只是为了我的clarification@JamieRees谢谢你,杰米,这解决了我的问题,我开始工作了。这是我公认的答案。我无法提升自己的声誉这是一个很好的回应,也是我想要做的。--我只是想知道你是否有一个例子,你在连续的NUnit测试中使用过它?当然,在文章中,有一个链接到github repo,其中有一些例子。这里有一个: