C# 如何设置一个对象的实例,如下代码所示?
我希望你能帮我解决问题,请: 在我的测试类中,我尝试运行我的测试代码:C# 如何设置一个对象的实例,如下代码所示?,c#,selenium,variables,webdriver,set,C#,Selenium,Variables,Webdriver,Set,我希望你能帮我解决问题,请: 在我的测试类中,我尝试运行我的测试代码: [setUp] public void setup() { BrowserFactory.InitBrowser("Chrome"); } 但是,它失败了,因为它没有初始化“driver”变量 (我得到消息:system.nullReferenceException:WebDriver浏览器实例未初始化。应首先调用InitBrowser方法) 下面是我从中复制的InitBrowser()函数的代码 使用OpenQA.Sel
[setUp]
public void setup()
{
BrowserFactory.InitBrowser("Chrome");
}
但是,它失败了,因为它没有初始化“driver”变量
(我得到消息:system.nullReferenceException:WebDriver浏览器实例未初始化。应首先调用InitBrowser方法)
下面是我从中复制的InitBrowser()函数的代码
使用OpenQA.Selenium;
使用OpenQA.Selenium.Chrome;
使用OpenQA.Selenium.Firefox;
使用OpenQA.Selenium.IE;
使用制度;
使用System.Collections.Generic;
命名空间_AutomationTests.WrapperFactory
{
公共类浏览器工厂
{
私有静态只读IDictionary驱动程序=新字典();
专用静态IWebDriver;
公共静态IWebDriver
{
得到
{
if(驱动程序==null)
抛出新的NullReferenceException(“WebDriver浏览器实例未初始化。应首先调用InitBrowser方法”);
返回驱动器;
}
专用设备
{
驱动因素=价值;
}
}
公共静态浏览器(字符串浏览器名)
{
开关(浏览器名称)
{
案例“Firefox”:
if(驱动程序==null)
{
驱动程序=新的FirefoxDriver();
添加(“Firefox”,驱动程序);
}
打破
案例“IE”:
if(驱动程序==null)
{
driver=新的InternetExplorerDriver(@“C:\PathTo\IEDriverServer”);
驱动程序。添加(“IE”,驱动程序);
}
打破
案例“铬”:
if(驱动程序==null)
{
driver=new ChromeDriver();/@“C:\PathTo\CHDriverServer”
驱动程序。添加(“铬”,驱动程序);
}
打破
}
}
公共静态void加载应用程序(字符串url)
{
Url=Url;
driver.Manage().Window.Maximize();
driver.Navigate().gotour(“javascript:document.getElementById('overridelink')。click()”;
}
公共静态void CloseAllDrivers()
{
foreach(驱动程序中的var键。键)
{
驱动程序[key].Close();
驱动程序[key]。退出();
}
}
}
}
非常感谢 您的代码中有一个bug 您应该更改以下每一行:
if(驱动程序==null)
为此:
if(驱动程序==null)
另一个选项是更改get from:
get
{
if (driver == null)
throw new NullReferenceException("The WebDriver browser instance was not initialized. You should first call the method InitBrowser.");
return driver;
}
致:
Mar,尝试粘贴项目的完整源代码。项目中ChromeDriver()、FirefoxDriver()和InternetExplorerDriver()的C#类在哪里。你事先把它们编码好了吗? 此处IWebDriver驱动程序是一个属性 在公共静态IWebDriver的getter中不需要空检查
public BrowserFactory()
{
Driver = new FirefoxDriver();
}
public static IWebDriver Driver
{
get
{
return driver;
}
private set
{
driver = value;
}
}
在静态初始值设定项或构造函数中加载类时,将IWebDriver的属性设置为实例,如:
甚至在驱动程序可以初始化之前,get属性就被调用了,它将null检查赋值为true&因此引发异常
要问自己的问题:
{
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;
}
}
}
[/pre]您可以将当前代码(用于测试和初始化浏览器)粘贴到您的问题中吗?可以。我使用了你的第一个建议,上面的问题就解决了。但是现在它在LoadApplication()函数“Driver.Url=Url;”上失败了,我得到了一条错误消息:“参数‘Url’不能为null。”当调用的station为:BrowserFactory.LoadApplication(ConfigurationManager.AppSettings[”)时,你能帮我一下吗?顺便问一下,我在这个链接中找到了相同的问题:是否有配置(例如app.config)文件在你的项目中?如果是这样,请在你的帖子中包含该文件的内容。这是正确的解决方案,我使用了与OP相同的代码,知道这些代码有问题,但不知道要准确修复哪个部分。
public BrowserFactory()
{
Driver = new FirefoxDriver();
}
public static IWebDriver Driver
{
get
{
return driver;
}
private set
{
driver = value;
}
}
{
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;
}
}
}