如何设置为下面的代码的对象的实例?
我要你的帮助,我的问题,请您: 从我的测试类,我尝试运行我的测试代码:如何设置为下面的代码的对象的实例?
[setUp]
public void setup()
{
BrowserFactory.InitBrowser("Chrome");
}
但是,它失败了,因为它没有初始化的“驱动器”变量。
(我得到了味精信息:System.NullReferenceException:将webdriver的浏览器实例未初始化,您应先调用方法InitBrowser。)
下面InitBrowser(代码)功能,因为我从http://toolsqa.com/selenium-webdriver/c-sharp/browser-factory-or-webdriver-factory/
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using System;
using System.Collections.Generic;
namespace _AutomationTests.WrapperFactory
{
public 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();
Drivers.Add("Firefox", Driver);
}
break;
case "IE":
if (Driver == null)
{
driver = new InternetExplorerDriver(@"C:\PathTo\IEDriverServer");
Drivers.Add("IE", Driver);
}
break;
case "Chrome":
if (Driver == null)
{
driver = new ChromeDriver();//@"C:\PathTo\CHDriverServer"
Drivers.Add("Chrome", Driver);
}
break;
}
}
public static void LoadApplication(string url)
{
Driver.Url = url;
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()");
}
public static void CloseAllDrivers()
{
foreach (var key in Drivers.Keys)
{
Drivers[key].Close();
Drivers[key].Quit();
}
}
}
复制
}
非常感谢!
代码中存在一个错误。
您应该更改这些行:
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;
}
这是正确的解决方案,我采用与OP相同的代码,并且知道这些是错误的,但不知道哪个部分要完全修复。 – Raimonds
3月,尝试粘贴项目的完整源代码。项目中的ChromeDriver(),FirefoxDriver(),InternetExplorerDriver()的C#类在哪里?你有预先编码吗? 这里IWebDriver驱动程序是一个属性,而类是在静态初始化加载
空检查是不是在公共静态IWebDriver驱动
public BrowserFactory()
{
Driver = new FirefoxDriver();
}
public static IWebDriver Driver
{
get
{
return driver;
}
private set
{
driver = value;
}
}
IWebDriver驱动器的属性设置为一个实例的吸气所需或构造函数如:
甚至在驱动程序可以被初始化之前,调用get属性来评估空值检查为真&,从而抛出异常。
问题要问自己:
- 您已经添加库文件为火狐,Chrome & IE?
- 它是你的项目配置文件的一部分吗?
如果没有添加,添加的最佳方式是在Visual Studio中使用Nuget包管理器 4.这些引用应该是您项目的一部分。让我发布一个类似项目的屏幕截图,我试过
5.查看Nuget Package Manager的图片
6。单击管理的NuGet软件包,浏览可用的软件包
最后,你不设置驱动器的新实例
[上一页]
{
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;
}
}
}
[/预]
你可以将你当前的代码(用于测试和InitBrowser)粘贴到你的问题中吗? – mjwills
是的。我使用你的第一个建议,并解决了上述问题。但现在它失败了LoadApplication()函数,“Driver.Url = url;”,我得到了这个错误信息:“参数'url'不能为空。”当被调用的语句是:BrowserFactory.LoadApplication(ConfigurationManager.AppSettings [“https://www.google.co.il/webhp?tab=ow&authuser=0&ei=Tnk2WZmXFMP7-AGGhIvwBQ&ved=0EKkuCAQoAQ”]); 你能帮我吗? –
顺便说一下,我发现在这个链接相同的Q:[链接](https://stackoverflow.com/questions/41104389/selenium-webdriver-the-webdriver-browser-instance-was-not-initialized-when-usin ) –