2017-07-18 20 views
0

IWebElementが表示されているかどうかを確認したいと思います。クラス内のIWebElementに到達しようとすると問題はありませんが、それは私のKontrolElement()関数に送信するとNullReferenceExceptionになります。このプロセスは何度か行われるため、KontrolElemet()が必要です。関数に送信された後にIWebElementがnullになる

KontrolElement()

//This is inside a class called 'Helpers' 
public void KontrolElement(IWebDriver WebDriver, IWebElement WebElement, string msg) 
{ 
    try 
    { 
     //"WebElement" is null 
     Assert.IsTrue(WebElement.Displayed); 
    } 
    catch (AssertionException) 
    { 
     Console.WriteLine("Kontrol: " + msg); 

     //Sends an E-mail with the screenshot of the page attached to it 
     new ScreenShot().Crush(WebDriver, msg, ""); 
    } 
} 

私は( 'エル' は、一般的にforeachループでiteraredさIReadOnlyCollection内部オブジェクトである)、それを使用する方法:

//This takes place in the PageObject class which extends 'Helpers' 
IWebElement el = WebDriver.FindElement(By.ClassName("listTop")); 

//Console.WriteLine(el.Displayed) outputs True 

KontrolElement(WebDriver, el, "el is not displayed"); 

は、誰もが同じような問題に直面していますこの?代替ソリューションは何ができますか?

+0

nullにすることは不可能だと思います。 'Console.WriteLine(el.Displayed)'のコメントを外すとどうなりますか?コンソールに "true"と "el not displayed"の両方が表示されていますか? – Buaban

+1

この話にはもっと多くのことが必要だと思われます。あなたが期待しているように物事が呼び出されていることを確認するために、プロセス全体を慎重に歩いていますか?上記のコードは最小限の形で動作しますが、私は何か明白なものを見逃していないことを確認するためにテストしました。上に示したように、 'KontrolElement'がヌル' IWebElement'で呼び出されるようになっていることが、さらに進んでいます。 – mrfreester

+0

@mrfreester私は、 'NullReferenceException'がそれと何か関係があることを知りました。また、質問で 'KontrolElement()'を完成しました。この関数の中で 'NullReferenceException'がスローされていることは確かです。 –

答えて

0

私は、Assertをラップしたり、何かを関数に単純にラップすることの大きなファンではありません。あなたは何を得ますか?必要以上に複雑なものにしないでください。

機能を削除し、ちょうどあなたのスクリプト

IWebElement el = WebDriver.FindElement(By.ClassName("listTop")); 
Assert.IsTrue(el.Displayed, "Verify element is displayed"); 
私はより具体的なもの、例えばにアサートコメントに「要素」に変更します

に以下のコードを使用します「ログインボタンが表示されていることを確認してください。

この機能の使用を強くお勧めする場合は、使用していないときになぜIWebDriverを渡していますか?

もう1つのこと...一般的なExceptionをキャッチするのは良い方法ではありません。あなたが処理しようとしているものだけを捕まえる。 System.DebugNlogライブラリ間の競合が問題の原因となった

+0

私はこのすべてをコメントとして+1したいと思いますが、これが実際に質問に答えるかどうかはわかりません。つまり、これらのベストプラクティスを実行すると、コード内のバグを追跡するのが面倒で難しくなります。これは、OPが最初にこのエラーを回避するのに役立ちます。 – mrfreester

+1

@mrfreester OPの関数には問題に含まれていないものがあると思います。そうでなければ関数は問題ではなく、彼はnullのWebElementを渡しています。私は2つの行で提供した単純なコードをそのまま使用すれば、null WebElementを修正する必要があります。要素が見つからない場合は、別の例外が発生し、問題につながる可能性があります。私は、要素で何かをしてヌル参照を返すというコードは提供されていないと思います。 – JeffC

+0

@mrfreesterもし私が推測するなら、彼はnull参照を返すいくつかのコードでおそらく見つからない例外を食べているでしょう...しかし...質問に関連するすべてのコードが含まれていなければ決してわかりません – JeffC

0

、コンパイラは見返りにNullReferenceExceptionを投げるでしょうSystem.DebugライブラリでAssertリファレンスを参照してくださいます。

関連する問題