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

本文关键字:UI 代码 测试 浏览器 何管理 管理 | 更新日期: 2023-09-27 18:36:25

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

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

多亏了Selenium,每个浏览器的测试代码几乎相同。所以我们不想再重复了。

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

LoginTestFF
LoginTestIE
LoginTestChrome

但是使用一组测试代码?

我发现 xUnit 中的 [浏览器] 属性应该没问题。

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

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

如果您仍然想看到所有三个都是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
}

我不确定VS的方法。

使用

NUnit,使用参数化测试,即将参数传递到测试用例中的想法。因此,您没有LoginFF,LoginIE,LoginChrome,而是拥有类似的东西:

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

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

在我的示例中,结合Resharper,JustCode或任何NUnit测试运行程序,它将在VS中显示三次测试。