0

我得到一个对象引用未设置为该程序中对象错误的实例。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:line 52 中的 ClassLibrary1.LocalLib.StartDriverUsingXMLReader()

第 52 行:字符串 parentBrowser = reader.GetAttribute("browser");

xml文件信息

<?xml version="1.0" encoding="utf-8" ?>
   <settings>
     <!--browser info-->
     <settings browser="firefox"/>  
   </settings>
4

2 回答 2

1

确认您的 XML 文件是否具有browser属性。如果不是,或者它是一个空字符串,GetAttribute将返回 null 并且NullReferenceException当您尝试调用ToLoweron时,您将在下一行得到 a parentBrowser。另一个潜在的问题reader是 null 但我认为如果是这种情况,它会更早抛出。

顺便说一句,NullReferenceExceptions它们是 C# 代码中最常见的运行时错误之一。您应该看看其他类似的问题,因为问题总是相同的,您有一些引用类型,.当它为空时您尝试使用运算符。找出它为什么为空并防止它或在使用.运算符之前添加检查总是可以解决问题。

于 2013-09-23T16:53:20.467 回答
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"/>

这里有一个设置节点,包含browserusernamepasswordimplicitWaitexplicitWait属性。

然后,您可以从 C# 代码中读取每个属性,就像您已经读取浏览器属性一样:

string parentBrowser = reader.GetAttribute("browser"); 字符串用户名 = reader.GetAttribute("username"); 字符串密码 = reader.GetAttribute("密码"); 字符串implicitWait = reader.GetAttribute("implicitWait"); string explicitWait = reader.GetAttribute("explicitWait");

请注意,属性将被读取为字符串,如果您需要它们为整数,则需要将它们转换为如下所示:

int implicitWait = int.Parse(reader.GetAttribute("implicitWait"));

于 2013-09-23T17:16:49.930 回答