3

当我在 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

4 回答 4

5

看看你的代码:

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

当然,您总是得到NullReferenceException- 。drivernull

目前尚不清楚您期望在这里发生什么 - 但也许您打算通过参数将FirefoxDriver您实例化的内容test1传递给method

于 2013-05-31T17:45:42.753 回答
3

您在 's 中分配driverClass1因此当它尝试在class2's上导航时method会失败,因为class2's driveris null。在调用它的任何方法之前,您需要为其分配一个值。

我不知道你为什么期望它会以NullReferenceException.

你可能打算写的是:

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

以及在哪里调用该方法Class1

    obj.method(driver);
于 2013-05-31T17:46:40.683 回答
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();
 }
于 2013-05-31T18:04:19.800 回答
2

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

要通过引用传递驱动程序,Class1您需要在下面;

obj.method(driver);

您需要进行修改Class2,以便它可以接收IWebDriverin method()

于 2013-05-31T18:11:25.043 回答