2011-06-10 86 views
0

我收到以下消息運行我的測試。C#異常:NullReferenceException

消息:

試驗方法Automation.Test1.General拋出異常: System.NullReferenceException:未設置爲一個對象的實例對象引用。

Automation.Library.CheckLogIn()在C:\的Documents and Settings \ Administrator的\我的文檔\ Visual Studio 2010的\項目\自動化\自動化\ Library.cs:行152

Automation.Test1.General( )在C:\ Documents和Settings \管理員\我的文檔\的Visual Studio 2010 \項目\自動化\自動化\ Test1.cs:線72

Library.cs(超類)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Selenium; 
using System.IO; 
using System.Reflection; 
using System.Net; 
using System.Configuration; 

namespace Automation 
{ 
[TestClass] 
public class Library 
{ 
    public ISelenium Sel; 

    // Open browser 
    public void OpenBrowser(out ISelenium selenium, out StringBuilder verificationErrors) 
    { 
     selenium = new DefaultSelenium(GetAppConfig("TestMachine"), 4444, GetAppConfig("Browser"), GetAppConfig("URL")); 
     selenium.Start(); 
     selenium.Open(GetAppConfig("URL")); 
     verificationErrors = new StringBuilder(); 
    } 

    // Returns the value of the passed key from App.config 
    public string GetAppConfig(string key) 
    { 
     return ConfigurationManager.AppSettings[key].ToString(); 
    } 

    // Check for Login 
    public void CheckLogIn() 
    { 
     if (Sel.IsElementPresent(GetAppConfig("SignOn"))) 
     { 
      Sel.Type(GetAppConfig("UserNameField"), GetAppConfig("UserName")); 
      Sel.Type(GetAppConfig("PWDField"), GetAppConfig("PWD")); 
      Sel.Click(GetAppConfig("Go")); 
     } 

     else 
     { 
      // do nothing 
     } 
    } 
} 

}

Test1.cs(子類)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Selenium; 
using System.IO; 
using System.Reflection; 
using System.Net; 
using System.Configuration; 

namespace Automation 
{ 
[TestClass] 
public class Test1 
{ 
    public ISelenium Sel; 
    public StringBuilder Err; 
    Boolean bNextFlag = false; 
    Library Lib = new Library(); 

    // Constructor 
    public Test1() 
    { 
     // Launch browser with application URL 
     Lib.OpenBrowser(out Sel, out Err); 
     Sel.WindowMaximize(); 
     Lib.CheckLogIn(); 
    } 

    [TestMethod] 
    public void General() 
    { 
     // Verify Tab 
     if (Sel.IsElementPresent(Lib.GetAppConfig("TAB"))) 
     { 
      Sel.Click(Lib.GetAppConfig("TAB")); 
      bNextFlag = true; 
     } 

     else 
     { 
      // do something 
     } 
    } 
} 

}

app.config.xml

<?xml version="1.0" encoding="utf-8" ?> 

<add key="TestMachine" value="localhost"/> 
<add key="Browser" value="*iexplore"/> 
<add key="URL" value="http://localhost//Default.aspx"/> 


<!-- CheckLogIn--> 
<add key="SignOn" value="//*[@id=&quot;LogIn&quot;]"/> 
<add key="UserNameField" value="//*[@id=&quot;username&quot;]"/> 
<add key="PWDField" value="//*[@id=&quot;pwd&quot;]"/> 
<add key="Go" value="//*[@id=&quot;gobutton&quot;]"/> 
<add key="UserName" value="admin"/> 
<add key="PWD" value="password"/> 
<!-- End of CheckLogIn--> 

<!-- Object Definitions--> 

<add key="TAB" value="//*[@id=&quot;Tab&quot;]"/> 

<!-- End of Object Definitios--> 

回答

2

嗯,我實在不明白在您的文章的一個問題,所以我想我會指出明顯...

你的錯誤是告訴你,你有一個NullReferenceException正在這個方法的地方拋出:

public void CheckLogIn() 
{ 
    if (Sel.IsElementPresent(GetAppConfig("SignOn"))) 
    { 
     Sel.Type(GetAppConfig("UserNameField"), GetAppConfig("UserName")); 
     Sel.Type(GetAppConfig("PWDField"), GetAppConfig("PWD")); 
     Sel.Click(GetAppConfig("Go")); 
    } 
    else 
    { 
     // do nothing 
    } 
} 

Selnull。你的代碼中沒有任何地方會實際初始化它。你需要初始化它的地方,如:

Sel = new SomeTypeThatImplementsISelenium(); 

此外,GetAppConfig是按每文檔棄用。

+0

感謝您的迴應,但我不確定我通過初始化Sel瞭解您的意思。我如何初始化它? – Maya 2011-06-10 17:32:24

+0

作爲參考類型,「Sel」的默認值將爲空。你需要分配一個實現'ISelenium'的實例,或者把它作爲你的構造函數的參數或者創建一個新的對象。 – 2011-06-10 17:44:53

+0

謝謝!謝謝!!非常感謝! – Maya 2011-06-10 18:03:45

0

public ISelenium Sel;

我可以看到Sel被定義,但從來沒有給它賦值。

1

是的,你可能需要初始化一個對象的實例,然後才能使用它的任何方法。一個簡單的方法是在拋出錯誤之前在某處添加一個斷點,然後使用觀察窗口初始化硒並查看返回的Sel.IsElementPresent(GetAppConfig(「SignOn」))是true還是false。