我在此程序中得到的对象引用未设置为对象错误的实例。 selenium的初学者想要尝试通过xmlreader打开浏览器。我在本地库中有xmlreader代码和openurl(只需打开一个google页面)。我想通过创建一个实例在[setup]和[test]中调用这些方法。任何帮助表示赞赏。
namespace ClassLibrary1
{
[TestFixture]
public class Class1
{
IWebDriver driver = null;
LocalLib localLib;
[SetUp]
public void openBrowser()
{
localLib = new LocalLib(driver);
localLib.StartDriverUsingXMLReader();
}
[Test]
public void url()
{
localLib.openUrl();
}
}
public class LocalLib
{
private IWebDriver driver = null;
public LocalLib(IWebDriver _driver)
{
this.driver = _driver;
}
public IWebDriver StartDriverUsingXMLReader()
{
try
{
XmlReader reader = XmlReader.Create(@"C:\Users\XXXXX\Desktop\XML.xml");
while (reader.Read())
{
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "settings"))
{
if (reader.HasAttributes)
{
string parentBrowser = reader.GetAttribute("browser");
if (parentBrowser.ToLower().Equals("Firefox".ToLower()))
{
driver = new FirefoxDriver();
}
else if (parentBrowser.ToLower().Equals("googlechrome".ToLower()))
{
driver = new ChromeDriver(@"C:\chromedriver2_win32_0.8");
}
else if (parentBrowser.ToLower().Equals("Iexplore".ToLower()))
{
driver = new InternetExplorerDriver(@"C:\IEDriverServer_x64_2.32.3");
}
}
}
} return driver;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
throw;
}
}
public void openUrl()
{
driver.Navigate().GoToUrl("www.google.com");
}
}
}
错误: 你调用的对象是空的。 在C:\ Users \ XXXX \ XML测试项目\ Class1.cs中的ClassLibrary1.LocalLib.StartDriverUsingXMLReader():第52行
第52行: string parentBrowser = reader.GetAttribute(“browser”);Xml文件信息
<?xml version="1.0" encoding="utf-8" ?>
<settings>
<!--browser info-->
<settings browser="firefox"/>
</settings>
答案 0 :(得分:1)
确认您的XML文件是否具有browser
属性。如果没有,或者它是一个空字符串,GetAttribute
将返回null,当您尝试在NullReferenceException
上调用ToLower
时,您会在下一行获得parentBrowser
。另一个潜在的问题是reader
为空但我认为如果是这样的话,它会早先抛出。
顺便说一句,NullReferenceExceptions
是C#代码中最常见的运行时错误。您应该查看其他类似的问题,因为问题总是相同的,您有一些引用类型,当它为null时,您尝试使用.
运算符。在使用.
运算符之前确定为什么它为空并防止或添加检查总能解决问题。
答案 1 :(得分:1)
使用工作示例仔细检查XML文件的内容。
尝试将其用作XML的内容。
<?xml version="1.0" encoding="utf-8" ?>
<!--browser info-->
<settings browser="firefox"/>
如果您想添加更多信息,请在设置节点中添加更多属性,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<settings browser="firefox" username="abcd@yahoo.com" password="abcd" implicitWait="3" explicitWait="3"/>
您有设置节点,浏览器,用户名,密码, implicitWait 和 explicitWait 属性。
然后,您可以通过C#代码以与已阅读浏览器属性相同的方式阅读每个属性:
string parentBrowser = reader.GetAttribute(“browser”); string username = reader.GetAttribute(“username”); string password = reader.GetAttribute(“password”); string implicitWait = reader.GetAttribute(“implicitWait”); string explicitWait = reader.GetAttribute(“explicitWait”);
请注意,属性将被读取为字符串,如果您需要将它们作为整数,则需要使用以下内容进行转换:
int implicitWait = int.Parse(reader.GetAttribute(“implicitWait”));