【问题标题】:Cross-Browser testing with Selenium WebDriver using C#使用 C# 使用 Selenium WebDriver 进行跨浏览器测试
【发布时间】:2015-10-15 23:42:22
【问题描述】:

我希望能够在不同的浏览器(FF/IE/Chrome)上运行我的单元测试,而无需修改代码来更改我正在使用的网络驱动程序。我是硒测试的新手,如果有任何建议,我将不胜感激。

我希望能够做到以下几点:

  1. 针对特定浏览器运行特定测试
  2. 针对特定浏览器运行所有测试
  3. 针对所有浏览器运行所有测试

以下是我考虑过的一些选项,但它们并不能满足我的所有需求。

  1. 询问用户(通过对话窗口)运行测试的浏览器 反对
    • 此方法满足上面列出的条件 #1,但不满足条件 2 和 3。
    • 这种方法会导致提示用户进行每个测试,因此它不满足条件 #2
  2. 将默认浏览器存储在配置文件中。
    • 可以使用文本编辑器轻松编辑配置文件
    • 此方法满足条件 #1 和 #2,但需要手动编辑 运行测试之前的配置文件。

【问题讨论】:

  • 你在使用NUnit吗?
  • 不,但如果它是更好的选择,我可以考虑使用它。我目前正在使用 Visual Studio 单元测试来运行我的测试。
  • this。但是,这是一种顺序执行不并行的方式,不一定满足您的要求
  • 我看不出他想在哪里并行运行测试,但如果他这样做了,他可以在这里找到我的解决方案:blog.dmbcllc.com/…

标签: c# selenium selenium-webdriver


【解决方案1】:

这是解决您问题的一种简单方法。 您可以使用 NUnit 在多个浏览器上执行 selenium 测试。您需要做的就是从 NuGet 下载 Nunit 并在您的项目中引用它。这是一个运行良好的示例代码。

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

namespace MultipleBrowserTesting
{
[TestFixture(typeof(FirefoxDriver))]
[TestFixture(typeof(ChromeDriver))]
[TestFixture(typeof(InternetExplorerDriver))]
public class BlogTest<TWebDriver> where TWebDriver : IWebDriver, new()
{
    private IWebDriver _driver;

    [Test]
    public void Can_Visit_Google()
    {
        _driver = new TWebDriver();

        // Navigate
        _driver.Manage().Window.Maximize();
        _driver.Navigate().GoToUrl("http://www.google.com/");
    }

    [TestFixtureTearDown]
    public void FixtureTearDown()
    {
        if (_driver != null) 
            _driver.Close();
    }
}
}

【讨论】:

    【解决方案2】:

    如果您使用的是 Visual Studio,则可以使用有序测试。我所做的是,我创建了三个独立的测试用例,即 SetIE、SetChrome 和 SetFireFox。

     [TestMethod]
        public void SetIE()
        {
            Browser.Type = "IE";
    
        }
    
    
        [TestMethod]
        public void SetFireFox()
        {
            Browser.Type = "FF";
    
        }
    
    
        [TestMethod]
        public void SetChrome()
        {
    
            Browser.Type = "CR";
        }
    

    这些方法只是在类变量中设置一个字符串,没有做任何其他事情。 创建一个方法来初始化你的 webDriver

       IWebDriver WebDriver = null;
    
    public static void InitializeDriver(TestContext t)
        {
          if (WebDriver == null)
                {
    
                    string DRIVER_PATH = @"C:\automation\driversFolder\";
    
                    switch (Browser.Type)
                    {
                        case "IE":
    
                            WebDriver = new InternetExplorerDriver(DRIVER_PATH);                         
    
                            break;
    
                        case "FF": 
    
                            WebDriver = new FirefoxDriver();
                            break;
    
    
                        case "CR":
    
                            WebDriver = new ChromeDriver(DRIVER_PATH);
                            break;
    
                        default:
                            WebDriver = new FirefoxDriver();                           
                            break;
    
                    }
    
                }
    
        }
    

    请参阅这篇博文,它或多或少地描述了this 解决方案。

    现在你要做的是为 IE 创建一个有序的测试。将第一个测试用例 SetIE 放在那里。在下面放置您的其他测试用例,例如登录等。现在您有一个套件可以在 IE 中执行您的测试用例。类似地为 Chrome 和 FireFox 创建有序测试。之后,创建第四个名为“All Browsers”的有序测试。在其中放置所有 3 个有序测试。

    之后,您现在可以执行以下操作。 A)如果您想针对特定浏览器运行单个测试用例,只需更改类中的浏览器名称并运行该测试用例。

    B) 如果您想针对特定浏览器运行所有测试,只需执行该特定浏览器的有序测试即可。

    C) 如果您想在所有浏览器上运行所有测试,请运行您的第四个有序测试。

    我希望它有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2012-06-01
      • 2019-05-02
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多