2013-05-31 57 views
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/"); 
    } 
    } 
} 
+1

在class2 method()中忘記'driver = new FirefoxDriver();'? – rene

+4

將來,當您編寫涉及異常的問題時,請向我們顯示*發生異常的位置。 –

回答

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(); 
} 
+0

您無法創建接口的新實例...您需要實例化實現該接口的類。 –

+0

@newStackExchangeInstance我不認爲回答者提供了實際的代碼,但指導OP做什麼。沒人知道具體類型是什麼.. – nawfal

+0

你說得對,我意識到IWebDriver是一個接口。修正它 –

5

看看你的代碼:

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

,當然你會得到一個NullReferenceException - driver總是null

目前尚不清楚你期望在這裏發生什麼 - 但也許你打算通過FirefoxDriver你在test1實例化到method通過參數?

+0

感謝您的建議。是的,我得到一個NullReferenceException。那麼應該寫什麼來代替Iwebdriver driver = null; – jessica

+0

@jessica:那麼我們不知道你想調用哪個對象。你在'test1'中實例化了一個,還是另一個?如果你對C#相當陌生(聽起來就像是這種情況,如果你對這裏得到一個異常感到驚訝),我強烈建議自動化Web測試不是一個很好的起點 - 我建議學習語言的核心更多第一。 –

+0

您應該在調用其導航方法之前實例化您的驅動程序對象。 –

2

你在你Class1分配driver,所以當它試圖在class2導航的method失敗,爲class2drivernull。您需要在調用任何方法之前爲其分配一個值。

我不知道你爲什麼不會預計它會失敗,NullReferenceException

你大概的意思寫了:

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

,並在那裏你調用Class1方法:

obj.method(driver); 
+0

是的,我得到一個NullReferenceException。那麼應該寫什麼來代替Iwebdriver driver = null; – jessica

+0

@jessica補充說。 –

+0

謝謝。我感謝您的幫助。 – jessica

2

需要在Class1合格driver引用Class2,並在那裏分配給driver 。當通過引用傳遞時,您傳遞內存地址,因此Class2中的driverClass1中的driver相同,因爲它們都指向計算機內存中的相同地址。

要通過Class1中的引用傳遞驅動程序,您需要在下面;

obj.method(driver); 

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

+0

謝謝。它現在有效。 – jessica

相關問題