你调用的对象是空的

时间:2013-05-31 17:44:37

标签: c# selenium null selenium-webdriver nullreferenceexception

当我在NUnit中运行此程序时,我收到错误

  

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

虽然这不是原始程序,但我也遇到了类似的错误。任何帮助赞赏。

出现例外情况
driver.Navigate().GoToUrl("http://www.yahoo.com/");

计划:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;

namespace Class_and_object
{
  [TestFixture]
  public class Class1
  {
     IWebDriver driver = null;
     [Test]
     public void test1()
     {
        class2 obj = new class2();
        driver = new FirefoxDriver();
        driver.Navigate().GoToUrl("http://www.google.com/");
        obj.method();
     }
   }
  public class class2
  {
    IWebDriver driver = null;
    public void method()
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
  }
}

4 个答案:

答案 0 :(得分:5)

看看你的代码:

public class class2
{
    IWebDriver driver = null;
    public void method()
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
}

当然,您获得NullReferenceException - driver始终为null

目前尚不清楚您预期会发生什么 - 但也许您打算通过参数将FirefoxDriver test1实例化为method

答案 1 :(得分:2)

您在driver中分配了Class1,因此当它尝试在class2 method上导航时,它会失败,因为class2' s drivernull。在调用任何方法之前,需要为其赋值。

我不知道为什么你 希望它失败NullReferenceException

你可能想写的是:

  public class class2
  {
    public void method(IWebDriver driver)
    {
        driver.Navigate().GoToUrl("http://www.yahoo.com/");
    }
  }

您在Class1中调用方法的地方:

    obj.method(driver);

答案 2 :(得分:2)

如果类中有对象,则需要先实例化才能使用它。可以说,最好的地方之一是你的构造函数。

像这样:

public class class2
{
   IWebDriver driver = null;


   public class2(IWebDriver driver)
   {
      this.driver = driver;
   }
   public void method()
   {
     driver.Navigate().GoToUrl("http://www.yahoo.com/");
   }
}

然后你的另一个类看起来像这样

public void test1()
 {
    driver = new FirefoxDriver();
    class2 obj = new class2(driver);

    driver.Navigate().GoToUrl("http://www.google.com/");
    obj.method();
 }

答案 3 :(得分:2)

您需要将driverClass1的引用传递给Class2并将其分配给driver。当您通过引用传递时,您传递了内存地址,因此driver中的Class2driver中的Class1变为相同,因为它们都指向计算机内存中的相同地址。

要通过Class1中的引用传递驱动程序,您需要以下内容;

obj.method(driver);

您需要修改Class2,以便它可以在IWebDriver中收到method()