在构造每个测试后如何调用方法? C#,NUnit

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

我正在使用NUnit + Selenium编写Web UI测试。我正在使用ValueSource将浏览器列表传递到测试方法中,这将为测试运行器中的每个浏览器创建该测试的副本。在测试方法内部,我调用了另一个方法,将浏览器传递到其中,以便调用相关的浏览器驱动程序并可以进行测试。

我遇到的问题是,我需要在每个测试用例中调用InvokeDriver(browser)方法,该方法会重复代码。所有测试都需要调用此方法,并从ValueSource列表通过浏览器。因此,我需要一种方法来调用此方法just after,即在构造测试后但没有重复此代码的情况。我无法在[SetUp]中调用该方法,因为该方法会在测试之前运行(此时没有ValueSource值可用于传递给InvokeDriver)。

namespace CoreSeleniumFramework.Tests
{
    public class HomePageTests : TestBase
    {
        [Test]
        public void Test1([ValueSource("BrowserList")] Browsers browser)
        {
            InvokeDriver(browser);
            // Do testing here
        }
    }
}

测试库...

namespace CoreSeleniumFramework.Base
{
    public enum TestCategories
    {
        Acceptance, Regression, Sanity
    }

    public enum Browsers
    {
        Chrome, Firefox, Edge
    }

    [TestFixture]
    public class TestBase
    {
        public static TestCategories categoryToTest = TestCategories.Acceptance;

        public static List<Browsers> acceptanceBrowsers = new List<Browsers>() {
            Browsers.Chrome
        };
        public static List<Browsers> regressionBrowsers = new List<Browsers>() {
            Browsers.Firefox
        };
        public static List<Browsers> sanityBrowsers = new List<Browsers>() {
            Browsers.Edge
        };

        public IWebDriver driver;

        public void InvokeDriver(Browsers browser)
        {
            switch (browser)
            {
                case Browsers.Chrome:
                    driver = new ChromeDriver();
                    break;
                case Browsers.Firefox:
                    driver = new FirefoxDriver();
                    break;
                case Browsers.Edge:
                    driver = new EdgeDriver();
                    break;
                default:
                    throw new Exception("InitialiseDriver(): chosen browser not recognised.");
            }
        }

        public static List<Browsers> BrowserList()
        {
            List<Browsers> browserList;

            switch (categoryToTest)
            {
                case TestCategories.Acceptance:
                    browserList = acceptanceBrowsers;
                    break;
                case TestCategories.Regression:
                    browserList = regressionBrowsers;
                    break;
                case TestCategories.Sanity:
                    browserList = sanityBrowsers;
                    break;
                default:
                    throw new Exception("BrowserList(): no browser list available.");
            }

            return browserList;
        }
    }
}
c# selenium unit-testing selenium-webdriver nunit
1个回答
0
投票

您是否在测试中的其他任何地方使用Browsers?还是只需要实例化WebDriver

您可能会创建另一种方法或更改当前方法以在检索browserList后将其调用驱动程序并将其提供给测试用例,即:

   public static IEnumerable<IWebDriver> BrowserListInitialized()
    {
        return BrowserList().Select(browser => InvokeDriver(browser));            
    }

InvokeDriver更改为静态并返回初始化的驱动程序:

    public static IWebDriver InvokeDriver(Browsers browser)
    {
        switch (browser)
        {
            case Browsers.Chrome:
                return new ChromeDriver();
                break;
            case Browsers.Firefox:
                return new FirefoxDriver();
                break;
            case Browsers.Edge:
                return new EdgeDriver();
                break;
            default:
                throw new Exception("InitialiseDriver(): chosen browser not recognised.");
        }
    }

并使用它:

    [Test]
    public void Test1([ValueSource("BrowserListInitialized")] IWebDriver driver)
    {
        //driver already initialized and passed as an argument
        driver.DoStuff();
    }
© www.soinside.com 2019 - 2024. All rights reserved.