当前位置: 首页 > 面试题库 >

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

洪开诚
2023-03-14
问题内容

我有一种创建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));
    }

然后我有一个Test类:

[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.Intialize被调用时,它无法同时运行chrome和firefox。我要发生的是,调用Init方法时,它将启动两个浏览器并在每个浏览器中运行测试方法。


问题答案:

我目前使用NUnit的方式。我遇到了同样的问题,找不到使用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();

}
}
}

驾驶舱

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

我已尝试将其适合您的代码。



 类似资料:
  • 我正在探索硒网格,用于在多个浏览器上执行测试。我已经按照在线教程配置了集线器和节点。我已经创建了一个测试脚本。 这是测试脚本的代码: 我的目标是在多个浏览器上运行此测试,我已经添加了所需的功能,如火狐, 感谢任何帮助

  • 问题内容: 我正在寻找一种推荐/最有效的方式来使Selenium测试在多个浏览器中依次执行。我正在测试的网站并不大,所以我还不需要并行解决方案。 我有一个平时测试的建立方法,以及。当然,SetUp实例将使用我要测试的任何浏览器实例化一个新对象。 因此,我想以编程方式说:该测试将依次在Chrome,IE和Firefox上运行。我怎么做? 编辑: 这可能会有所帮助。成功构建后,我们将使用CruiseC

  • 问题内容: 我正在将Selenium WebDriver与Java和TestNG框架一起使用。我想一次在一个代码中使用Firefox,IE,Chrome来进行跨浏览器测试。我只能将Firefox初始化为 但无法以相同方式初始化其他浏览器。例如: 给出错误 给出错误 如何初始化IE和Chrome并在所有所需的浏览器中执行测试? 问题答案: 对于C# 加 创建一个包含浏览器名称的配置文件。实现与配置文

  • 问题内容: 因此,我已经开始创建一些使用Selenium RC来直接在浏览器中测试我的Web应用程序的Ruby单元测试。我正在将Selenum- Client 用于红宝石。我已经为所有其他selenium测试创建了基类。 这将创建许多SeleniumDriver实例,并且在每个实例上调用所有缺少的方法。这实际上是并行运行测试。 别人如何做到这一点? 这是我的实现: 这可以工作,但是如果一个浏览器失

  • 问题内容: 我是硒测试的新手。我想针对Internet Explorer,Firefox,Opera和Chrome在多种浏览器上运行。我必须遵循什么方法。大家能否建议我这是最好的过程。 硒Web驱动程序是否支持多种浏览器??? 我们已经编写了登录脚本。它可以分别在Firefox,Chrome和Internet Explorer中成功运行。但我想按顺序为那些多个浏览器运行它。 问题答案: 在此之前,

  • 我试图在浏览器堆栈上运行多个浏览器上的E2E测试,我参考了在量角器中的多个/并行浏览器上的E2E测试?和Internet Explorer Selenium量角器e2e测试 但每次我试着运行测试时都会犯错- 谁能告诉我什么是我做错了这里,而且我们使用gulp ti运行规范,但我的问题是它是说,甚至没有超出认证。