有没有办法可以在 C# 的 Selenium 测试中的条件语句中使用测试描述?

问题描述 投票:0回答:1

我正在为订购系统创建测试;我已经使用 Visual Studio 2022 在 C# 中为其周围的各个页面创建了测试,现在我正在为排序部分本身创建测试。我有一个 BasePage 类,其中包含一个 switch 语句,该语句根据传递到包含开关的方法中的值来确定要访问的 URL (OpenBrowserandGoToURL)。每个测试页面都有不同的 URL。

到目前为止,该模型一切都按预期工作:

[TestInitialize]
public void Setup()
{
    //Code that is not germane to the question
    PlaceOrder = new OrderPage(Driver) 
    PlaceOrder.OpenBrowserandGoToURL("TheTextThatTellsTheSwitchStatementWhichURLToVisit")
}

[TestMethod]
[Description("California")]
// Nothing here or below matters

所以让我澄清一下关于上面代码的一些事情。这段代码位于一个名为 OrderTest 的类中,该类在 OrderPage(编写实际测试的地方)上运行所有测试。毫无疑问,当我创建 OrderPagePlaceOrder 实例时,它使用我在设置的最后一行中用引号引起来的内容来从 switch 语句中获取 URL。到目前为止,每一类测试都使用一个且仅一个 URL,因为我一次测试一个页面。

但问题是 - 我需要测试三个不同状态的订单系统。每个系统的所有元素都是相同的(所有 id、xpath 等)- 完全相同。只是文字不同而已。因为所有元素都是相同的,所以我不想为每个订购系统编写一个测试。我只想编写一个测试,并让一些条件语句确定要使用哪个州的订购系统 URL。我已经研究了一些可行的解决方案,例如,我可以采用 PlaceOrder.OpenBrowserandGoToURL 行并将其粘贴在每个测试方法的顶部(每个状态都会有很多)在声明语句下方法。但这会导致我不得不复制并粘贴代码或一遍又一遍地输入相同的代码。我听说这是禁忌。 :-)。我能想到的最简单的事情是以某种方式捕获每个 [TestMethod] 中描述的值并在PlaceOrder.OpenBrowserandGoToURL中使用它。像这样的东西:

[TestInitialize]
public void Setup()
{
    //Code that is not germane to the question
    PlaceOrder = new OrderPage(Driver)
    string methodDescription = [the code that gets the Description from the test method]
    PlaceOrder.OpenBrowserandGoToURL(methodDescription) // Send "California" to the method in BasePage
                                                        // to be used in the switch statement.
}

[TestMethod]
[Description("California")]
// Nothing here or below matters

这可能吗?或者是否有一种更有效的方法来做到这一点,让我不必为三个不同的订单系统重复代码,也不需要我更新 BasePage 类中的 OpenBrowserandGoToURL 方法(或 中的任何方法) BasePage类,就此而言),这样它就不再适用于只有一个 URL 的测试(即,不会破坏我之前编写的所有测试)?

我访问了其他一些 Stack Overflow 页面,并且发现了一些提到 NUnit 的 CurrentContext 的文章,例如:

TestContext.CurrentContext.Test.Properties.Get("Description")

但我无法做到这一点 - 不确定是否是因为我正在尝试使用使用 [TestInitialize] 属性的方法外部的测试方法的描述,如果它已经过时或语言错误,或者如果我只是没有正确使用它(我将一个字符串变量设置为其值 - 至少这是我尝试做的)。我想如果没有办法这样做的话,我会在完成后考虑整体框架,但我不想回去改变我已经完成的所有工作,因此,如果有一种方法可以获取 [TestInitialize] 属性下的方法,以捕获具有 [TestMethod] 属性的每个测试用例的描述,那将使我的生活更轻松。为了以防万一,我使用 Chrome 进行这些测试。预先感谢您!

c# selenium-webdriver automated-tests nunit
1个回答
0
投票

看起来您正在使用 MSTest 而不是 Nunit。

尝试添加正确的using语句并将测试属性更新为[Test]和[SetUp]

using NUnit.Framework;

[Setup]
public void Setup()
{
    // Setup code
}

[Test]
[Description("URL")
public void Test()
{
    // Test code here
}

这将使用 NUnit,您现在应该能够使用 TestContext。但是,实现您所要求的方法是使用测试用例。

[TestCase("URL 1")]
[TestCase("URL 2")]
[TestCase("URL 3")]
public void Test(string url)
{

}
© www.soinside.com 2019 - 2024. All rights reserved.