如何实例化Factorymethod模式的对象并在不同的类中使用该方法?

时间:2018-09-28 14:59:19

标签: c# asp.net selenium factory-pattern factory-method

这是我定义了选择chrome和Firefox浏览器的BrowserRunnerFactory.cs:

InvalidRequest: Error from server: code=2200 [Invalid query]
  message="Unmatched column names/values"

我已经调用它,并在calss baseInitializer.cs中定义了两个不同的归档浏览器和驱动程序:

public class BrowserRunnerFactory
{
    public static IBrowserInterface InitiateBrowser(BrowserType BrowserType)
    {

        switch (BrowserType)
        {
            case BrowserType.Chrome:
                return new ChromeRunner();
            case BrowserType.Firefox:
            default:
                return new FirefoxRunner();
        }
    }

我正在尝试创建自动化测试,并且尝试使用浏览器来调用chrome浏览器。并使用 driver 字段来处理硒属性,例如driver.Manage(),driver.FindElement(By.Id()),driver.Close()*等。


因此,在baseInitializer.cs类中,它工作正常。我正在获得现场浏览器和驱动程序的价值。 浏览器字段在baseInitializer类中仅应调用一次,以便chrome浏览器打开以运行所有UI自动化测试。

但是,当我尝试从单独的类调用驱动程序时,请说ClientTab.cs,在此处尝试测试页面的某些选项卡,如下所示:

public void GetDriver()
    {
      if (browser is null)
        { 
            browser = 
            BrowserRunnerFactory.InitiateBrowser(BrowserType.Chrome);
            driver = browser.Driver;
        }
    }

运行测试后,我将获得NullReferenceException:对象引用未设置为对象的实例。 在调试时,我发现驱动程序为null。当我想要GetDriver方法中定义的驱动程序时

BaseInitializer baseinItializer = new Baseinitializer();
public IWebDriver driver = null;
 public bool TabIsOpen()
    {
        driver = baseInitializer.driver; 
        driver.Manage().Timeouts().PageLoad = TimeSpan.FromMinutes(1);
        try
        {
            driver.FindElement(By.XPath(_configModel.NewRepository)).Click();
            return true;
                       }
        catch (Exception e)
        {
            _logger.Log("Error occured while looking for CLientTabId:" + 
             e.Message);
            return false;
        }
        finally
        {
            driver.SwitchTo().DefaultContent();
        }
    }

我是第一次尝试这种设计模式,也是C#的初学者。因此,任何反馈以及有关我的编码实践的建议都将非常有帮助。

0 个答案:

没有答案
相关问题