首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象引用未设置为对象的实例

对象引用未设置为对象的实例
EN

Stack Overflow用户
提问于 2013-09-23 16:46:19
回答 2查看 1.6K关注 0票数 0

我得到一个对象引用,而不是设置为这个程序中对象错误的实例。selenium的初学者希望尝试通过xmlreader打开浏览器。我在本地库中有xmlreader代码和openurl(只需打开一个google页面)。我想通过创建一个实例在安装和测试中调用这些方法。任何帮助都很感激。

代码语言:javascript
复制
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:\ ClassLibrary1.LocalLib.StartDriverUsingXMLReader() \XXXX\XML测试项目\Class1.cs:第52行

第52行:字符串parentBrowser =reader.GetAttribute(“浏览器”);

Xml文件信息

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
   <settings>
     <!--browser info-->
     <settings browser="firefox"/>  
   </settings>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-23 17:16:49

用一个示例重复检查XML文件的内容。

尝试将此用作XML的内容。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<!--browser info-->
<settings browser="firefox"/>  

如果要添加更多信息,则应向设置节点添加更多属性,如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<settings browser="firefox" username="abcd@yahoo.com" password="abcd" implicitWait="3" explicitWait="3"/>

这里有一个implicitWait设置节点,具有浏览器用户名密码、和explicitWait属性。

然后,从C#代码中可以读取每个属性,方式与已经读取浏览器属性的方式相同:

字符串parentBrowser =reader.GetAttribute(“浏览器”);字符串用户名=reader.GetAttribute(“用户名”);字符串密码=reader.GetAttribute(“密码”);字符串implicitWait = reader.GetAttribute("implicitWait");字符串explicitWait = reader.GetAttribute("explicitWait");

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-09-23 16:53:20

确认您的XML文件是否具有browser属性。如果不是,或者是空字符串,GetAttribute将返回null,当您试图在parentBrowser上调用ToLower时,您将在下一行中得到一个ToLower。另一个潜在的问题是,reader是空的,但我认为如果是这样的话,它会在早些时候抛出。

顺便说一下,NullReferenceExceptions是C#代码中最常见的运行时错误之一。您应该看看其他类似的问题,因为问题总是一样的,您有一些引用类型,当它为null时尝试使用.操作符。在使用.运算符之前找出为什么为null并防止这种情况或添加检查总是解决问题的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18964604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档