简体   繁体   English

如何包装浏览器工厂类以用作服务类

[英]How to wrap Browser Factory Class for use as service class

I am trying to use browser factory instead of using webdriver directly in my tests but When I use it in tests I get Null Exception because it uses get before the init method. 我试图在我的测试中使用浏览器工厂而不是直接使用webdriver,但是当我在测试中使用它时,我会得到Null Exception,因为它在init方法之前使用了get。 I might have simple error but I can't seem to understand how write this service class as should. 我可能有一个简单的错误,但是我似乎无法理解如何编写该服务类。 So I won't get null exception and be able to use the driver in this class instead of creating another instance in the test class. 因此,我不会出现null异常,并且能够在此类中使用驱动程序,而不是在测试类中创建另一个实例。 I added my Browser factory 我添加了浏览器工厂

namespace WrapperFactory
{
   class BrowserFactory
 {
    private static readonly IDictionary<string, IWebDriver> Drivers = new Dictionary<string, IWebDriver>();
    private static IWebDriver driver;

    public static IWebDriver Driver
    {
        get
        {
            if (driver != null)
                    throw new NullReferenceException("The WebDriver browser instance was not initialized. " +
                    "You should first call the method InitBrowser.");
            return driver;
        }

        private set => driver = value;
    }

    public static void InitBrowser(string browserName)
    {
        switch (browserName)
        {
            case "Firefox":
                if (Driver == null)
                {
                    driver = new FirefoxDriver(".");
                    driver.Manage().Window.Maximize();
                    Drivers.Add("Firefox", Driver);
                }
                break;

            case "Chrome":
                if (Driver == null)
                {
                    var options = new ChromeOptions();
                    options.AddArgument("--start-maximized");
                    driver = new ChromeDriver(".", options);
                    Drivers.Add("Chrome", Driver);
                }
                break;
        }
    }

    public static void CloseAllDrivers()
    {
        foreach (var key in Drivers.Keys)
        {
            Drivers[key].Close();
            Drivers[key].Quit();
        }
    }
}

} }

I used it in my test but got exception of Null 我在测试中使用了它,但得到了Null例外

      public void VerifyerCtifications()
    {

        BrowserFactory.InitBrowser("chrome");
        IWebDriver driver = BrowserFactory.Driver;

        var homePage = new HomePage(driver);
        ResourcesPage rsp =  homePage.ClickOnResourceMenuAndGoToPage(BrowserFactory.Driver);
        AboutPage aboutPg = rsp.ClickOnClickCertificationBtn(BrowserFactory.Driver);
        aboutPg.ClickOnReadMoreAboutCertPrs(BrowserFactory.Driver);

        BrowserFactory.Driver.SwitchTo().Window(BrowserFactory.Driver.WindowHandles.Last());
        BlogPage blogPage = new BlogPage();
        IWebElement certificate = blogPage.GetFundamentalsOffer(BrowserFactory.Driver);
        Assert.NotNull(certificate);

You are checking in switch different String by case sensitive, should be: 您正在检查switch不同的字符串由大小写敏感的,应该是:

case "chrome":

You may also consider lower/upper case the String checked in switch as: 您还可以考虑将String in switch大小写更改为小写/大写:

browserName.toLowerCase()

Which will help you avoid case sensitive differences 这将帮助您避免区分大小写的差异

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM