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

にを割り当てているdriverためClass1、 の をナビゲートしようとすると、class2のようにmethod失敗しclass2ます。メソッドを呼び出す前に、値を割り当てる必要があります。drivernull

.で失敗することを期待しない理由がわかりません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

driverinの参照をに渡し、そこに in に割り当てる必要Class1Class2ありdriverます。参照渡しの場合、両方ともコンピュータ メモリ内の同じアドレスを指しているため、 driverinClass2が同じdriverinになるようにメモリ アドレスを渡します。Class1

参照によってドライバーを渡すには、Class1以下が必要です。

obj.method(driver);

Class2を受信できるようIWebDriverに変更する必要がありますmethod()

于 2013-05-31T18:11:25.043 に答える
2

クラスにオブジェクトがある場合、使用する前にインスタンス化する必要があります。おそらく、これを行うのに最適な場所の 1 つは、コンストラクターです。

このような:

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 に答える