0

このプログラムで、オブジェクト エラーのインスタンスに設定されていないオブジェクト参照が表示されます。Selenium の初心者なので、xmlreader を介してブラウザを開こうとしました。ローカル ライブラリに xmlreader コードと openurl (単に Google ページを開く) があります。インスタンスを作成して、[setup] と [test] でこれらのメソッドを呼び出したいと思います。どんな助けでも感謝します。

namespace ClassLibrary1
{
[TestFixture]
public class Class1
{
    IWebDriver driver = null;
    LocalLib localLib;
    [SetUp]
    public void openBrowser()
    {
        localLib = new LocalLib(driver);
        localLib.StartDriverUsingXMLReader();
    }
    [Test]
    public void url()
    {
        localLib.openUrl();            
    }     
}
public class LocalLib
{
    private IWebDriver driver = null;        
    public LocalLib(IWebDriver _driver)
    {
        this.driver = _driver;
    }
     public IWebDriver StartDriverUsingXMLReader()
    {
        try
        {
            XmlReader reader = XmlReader.Create(@"C:\Users\XXXXX\Desktop\XML.xml");
            while (reader.Read())
            {
                if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "settings"))
                {
                    if (reader.HasAttributes)
                    {
                        string parentBrowser = reader.GetAttribute("browser");
                        if (parentBrowser.ToLower().Equals("Firefox".ToLower()))
                        {
                            driver = new FirefoxDriver();
                        }
                        else if (parentBrowser.ToLower().Equals("googlechrome".ToLower()))
                        {
                            driver = new ChromeDriver(@"C:\chromedriver2_win32_0.8");
                        }
                        else if (parentBrowser.ToLower().Equals("Iexplore".ToLower()))
                        {
                            driver = new InternetExplorerDriver(@"C:\IEDriverServer_x64_2.32.3");
                        }
                    }
                }
            } return driver;
        }                
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
            throw;
        }
     }
     public void openUrl()
     {
         driver.Navigate().GoToUrl("www.google.com");
     }
   }
 }

エラー: オブジェクト参照がオブジェクトのインスタンスに設定されていません。ClassLibrary1.LocalLib.StartDriverUsingXMLReader() で C:\Users\XXXX\XML テスト project\Class1.cs:52 行目

52 行目: string parentBrowser = reader.GetAttribute("browser");

XML ファイル情報

<?xml version="1.0" encoding="utf-8" ?>
   <settings>
     <!--browser info-->
     <settings browser="firefox"/>  
   </settings>
4

2 に答える 2

1

XML ファイルに属性があるかどうかを確認しbrowserます。そうでない場合、または空の文字列の場合GetAttributeは null が返され、 onNullReferenceExceptionを呼び出そうとすると次の行に が表示されます。もう 1 つの潜在的な問題は、それが null であることですが、その場合はもっと早い段階でスローされていたと思います。ToLowerparentBrowserreader

ところで、NullReferenceExceptionsC# コードで最も一般的な実行時エラーの 1 つです。.問題は常に同じであるため、他の同様の質問を確認する必要があります.nullのときに演算子を使用しようとする参照型があります。演算子を使用する前に、null の理由を突き止めてそれを防止するか、チェックを追加することで、.常に問題が解決します。

于 2013-09-23T16:53:20.467 に答える
1

実際の例を使用して、XML ファイルの内容を再確認してください。

これを XML のコンテンツとして使用してみてください。

<?xml version="1.0" encoding="utf-8" ?>
<!--browser info-->
<settings browser="firefox"/>  

さらに情報を追加したい場合は、次のように、設定ノードにさらに属性を追加する必要があります。

<?xml version="1.0" encoding="utf-8" ?>
<settings browser="firefox" username="abcd@yahoo.com" password="abcd" implicitWait="3" explicitWait="3"/>

ここには、 browserusernamepasswordimplicitWait、およびexplicitWait属性を持つ設定ノードがあります。

次に、C# コードから、既にブラウザー属性を読み取っているのと同じ方法で各属性を読み取ることができます。

string parentBrowser = reader.GetAttribute("browser"); 文字列ユーザー名 = reader.GetAttribute("ユーザー名"); string password = reader.GetAttribute("password"); string implicitWait = reader.GetAttribute("implicitWait"); string explicitWait = reader.GetAttribute("explicitWait");

属性は文字列として読み取られることに注意してください。属性を整数にする必要がある場合は、次のように変換する必要があります。

int implicitWait = int.Parse(reader.GetAttribute("implicitWait"));

于 2013-09-23T17:16:49.930 に答える