在不同浏览器上条件执行自动化测试

时间:2015-10-20 09:53:44

标签: c# selenium selenium-webdriver nunit multiple-browsers

我想在三个浏览器上执行测试,我希望有条件地执行此测试。

示例 - 如果浏览器名称为chrome,请转到Google.com并搜索selenium测试。如果浏览器名称为Firefox,则搜索MongoDB。 这只是一个示例代码解决方案,但我需要在我的项目中实现这个概念。

我使用Nunit的TestFixture属性在多个浏览器上执行测试,我想继续使用NUnit。

以下是我正在使用的代码示例。

注意:由于“测试工具”属性中的搜索参数,您可能无法在“测试资源管理器”中看到测试。

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


namespace MultipleBrowserTesting
{
   [TestFixture(typeof(FirefoxDriver), "MongoDB")]
   [TestFixture(typeof(ChromeDriver), "Selenium Testing")]
   [TestFixture(typeof(InternetExplorerDriver), "ElasticSearch")]

    public class BlogTest<TWebDriver> where TWebDriver : IWebDriver, new()
    {
        private IWebDriver _driver;

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

        // Navigate
        _driver.Manage().Window.Maximize();

        _driver.Navigate().GoToUrl("http://www.google.ie/");
        _driver.FindElement(By.Id("lst-ib")).SendKeys("searchString");
        _driver.FindElement(By.Name("btnK")).Click();

        FixtureTearDown();
    }

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

我认为我以错误的方式传递参数。我已经提到了这个链接。

TestFixtureAttribute

2 个答案:

答案 0 :(得分:0)

我设法找到了自己问题的答案。这是示例代码。如果您有更好的解决方案,请发布。谢谢!

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


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();
        ICapabilities capabilities = ((RemoteWebDriver)_driver).Capabilities;
        string browser = capabilities.BrowserName;
        _driver.Manage().Window.Maximize();
        _driver.Navigate().GoToUrl("http://www.google.ie/");

        if (browser == "internet explorer")
        {
            _driver.FindElement(By.Id("lst-ib")).SendKeys("MongoDB");
        }
        else if (browser == "chrome")
        {
            _driver.FindElement(By.Id("lst-ib")).SendKeys("ElasticSearch");
        }
        else 
        {
            _driver.FindElement(By.Id("lst-ib")).SendKeys("Selenium");
        }
        _driver.FindElement(By.Name("btnG")).Click(); 
        FixtureTearDown();
    }

    [TestFixtureTearDown]
    public void FixtureTearDown()
    {
        _driver.Close();
    }
}
}

答案 1 :(得分:0)

有些技术人员可能会争论if else的使用情况,如果是这样,这里有另一种使用switch的解决方案。

public void Can_Visit_Google()
    {
        _driver = new TWebDriver();
        ICapabilities capabilities = ((RemoteWebDriver)_driver).Capabilities;
        string browser = capabilities.BrowserName;
        _driver.Manage().Window.Maximize();
        _driver.Navigate().GoToUrl("http://www.google.ie/");

        switch (browser)
        { 
            case ("internet explorer"):
                _driver.FindElement(By.Id("lst-ib")).SendKeys("ElasticSearch");
                break;

            case ("chrome"):
                _driver.FindElement(By.Id("lst-ib")).SendKeys("MongoDB");
                break;

            case ("firefox"): 
                _driver.FindElement(By.Id("lst-ib")).SendKeys("Selenium");
                break;
        }
                _driver.FindElement(By.Name("btnG")).Click();
                FixtureTearDown();
    }