如何管理不同浏览器的自动UI测试代码?

时间:2012-06-06 07:49:01

标签: c# selenium webdriver automated-tests selenium-webdriver

我们正在尝试使用Selenium进行一些自动UI测试。到目前为止,对于一个函数,我们至少为IE,FF,Chrome编写了3个测试。

例如,我们为LoginTestFF函数编写了3个测试:LoginTestIELoginTestChromelogin。这样,我们可以在VS测试视图中看到3个项目,并可以选择其中一个或全部项目来运行。

感谢Selenium,每个浏览器的测试代码都非常相似。所以我们不想再重复一次。

是否可以在VS测试视图中看到测试,如:

LoginTestFF
LoginTestIE
LoginTestChrome

但使用一组测试代码?

我在xUnit should be OK中找到了[Browser]属性。

如何为Visual Studio Testing开发这样的属性?

2 个答案:

答案 0 :(得分:2)

如果你仍然希望看到他们三个都是VS测试视图,你可以尝试这个。 (但如果您有十种不同的浏览器呢?)

[TestMethod]
public void LoginTestFF() {
    ExecuteLoginTest();
}

[TestMethod]
public void LoginTestIE() {
    ExecuteLoginTest();
}

[TestMethod]
public void LoginTestChrome() {
    ExecuteLoginTest();
}

public void ExecuteLoginTest() {
    //real test steps
}

如果您只想重用所有浏览器的代码,可以在App.config中定义所需的浏览器,然后使用开关案例进行选择。

<add key="Browser" value="Chrome"/>
IWebDriver driver;
string browser = ConfigurationManager.AppSettings["Browser"];
switch (browser) {
    case "Firefox":
        driver = new FirefoxDriver();
        break;
    case "IE":
        driver = new InterntExplorerDriver();
        break;
    case "Chrome":
        driver = new ChromeDriver();
        break;
    default:
        break;
}
// if this test can only be run against FF and Chrome, add test category to it
[TestMethod, TestCategory("Firefox"), TestCategory("Chrome")]
public void LoginTestTest() {
    //real test steps
}

答案 1 :(得分:1)

我不确定VS的方式。

使用NUnit,使用参数化测试,这是将参数传递到测试用例的想法。所以,不要使用LoginFF,LoginIE,LoginChrome,而是使用类似的东西:

[TestCase(Browser.IE)]
[TestCase(Browser.Firefox)]
[TestCase(Browser.Chrome)]
public void TestLogin(Browser browser)
{
    // test stuff
}

因此,重复对您提供的每个测试用例源属性的测试 - 这比为每种浏览器类型复制/粘贴测试方法更好。

在我的例子中,结合Resharper,JustCode或任何NUnit Test Runner,它将在VS中显示三次测试。