我想帮助解决我的问题,请: 从我的测试类开始,我尝试运行我的测试代码:
1 => 2
8 => 2
9 => 2
但是,它失败了,因为它没有初始化“驱动”变量。
(我得到了msg:system.nullReferenceException:WebDriver浏览器实例未初始化。你应该首先调用方法InitBrowser)
我从http://toolsqa.com/selenium-webdriver/c-sharp/browser-factory-or-webdriver-factory/
复制的InitBrowser()函数代码下面[setUp]
public void setup()
{
BrowserFactory.InitBrowser("Chrome");
}
}
非常感谢!
答案 0 :(得分:2)
您的代码中存在错误。
您应该更改以下每一行:
if (Driver == null)
到此:
if (driver == null)
另一种选择是改变来自:
get
{
if (driver == null)
throw new NullReferenceException("The WebDriver browser instance was not initialized. You should first call the method InitBrowser.");
return driver;
}
为:
get
{
return driver;
}
答案 1 :(得分:1)
公共静态IWebDriver驱动程序的getter中不需要空检查
public BrowserFactory()
{
Driver = new FirefoxDriver();
}
public static IWebDriver Driver
{
get
{
return driver;
}
private set
{
driver = value;
}
}
将类加载到静态初始值设定项或构造函数中时,将IWebDriver驱动程序的属性设置为实例:
即使在初始化驱动程序之前,也会调用get属性,将null检查重新评估为true&因此抛出异常。
要问自己的问题:
如果没有添加,最好的添加方法是在visual studio中使用Nuget Package manager 4.这些引用应该是您项目的一部分。让我发一个我试过的类似项目的截图 5.查看Nuget Package Manager的图片 6.单击Manage Nuget Packages,浏览Available Packages 7。
最后,您没有设置新的驱动程序实例
[pre]
{
class Driver
{
public enum Browser
{
chrome,
firefox,
ie,
}
public IWebDriver getDriver(string browser_type)
{
Browser parsed_browser_type; IWebDriver driver=null;
bool passed_type = browser_type != null ? true : false;
if (passed_type)
{
Enum.TryParse(browser_type, out parsed_browser_type);
switch (browser_type.ToLower())
{
case "chrome":
driver= new ChromeDriver(new ChromeOptions { Proxy = null });
break;
case "firefox":
driver= new FirefoxDriver();
break;
case "ie":
driver= new InternetExplorerDriver(new InternetExplorerOptions { Proxy = null });
break;
default:
case "":
throw new Exception("Browser cannot be null");
}
}
return driver;
}
}
}
[/预]