2017-06-24 11 views
0

ウェブサイト用のテストスクリプトを作成しようとしています。私はassertを使って次のコード行が実行される前にその要素がページ上にあることを確認し、その要素を呼び出したいと思います。C#、Selenium web-driver、NUnitを使用しているときにアサーション要素が表示されない

私はアサートでtry/catchブロックを使用しています。アサーションはIdまたはXpathで要素を見ることができません。それは失敗し、キャッチはそれをつかむ。 ここで楽しい部分があります:次のコード行では、IdまたはXpathで同じWeb要素を使用しています。これは私に困ってしまった。

class Program 
    { 
     static void Main(string[] args) 
     { 
      var driver = new ChromeDriver(); 
      driver.Navigate().GoToUrl("https://www.higgins3.com/"); 
      System.Threading.Thread.Sleep(2000); 
      //Assert try catch block to see if search box is one the page. 
      try 
      { 
       Assert.IsTrue(driver.FindElement(By.Id("s")).Displayed); 
       Console.Write("Search box display . assert Pass"); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Can not find Search Box . assert Fail"); 
      } 
      // End Assert 

      IWebElement element1 = driver.FindElement(By.Id("s")); 
      System.Threading.Thread.Sleep(2000); 
      element1.Click(); 
      element1.SendKeys("Printer"); 
      System.Threading.Thread.Sleep(2000); 
     } 
    } 
+1

エラーの内容を確認できるように例外メッセージを投稿してください。あなたの例外メッセージではなく、Seleniumによって投げられたメッセージです。 – CodingYoshi

答えて

0

これは、要素の負荷の問題です。暗黙的に待機するか、明示的に待機するかのどちらかを使用できます。どちらのウェイトも一定時間後に例外をスローします。表示された要素を確認する前に、以下を試してください。

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); 

これは、すべてのfind要素/要素メソッドに適用されます。

私の個人的なアドバイスは、静的待機であるため、必要になるまでスレッドスリープを使用しないでください。

0

NUnitからAssertionExceptionをキャッチすることはほとんど不可能です。この場合、AssertionExceptionまたはSeleniumからのタイムアウトが発生する可能性があります。 Exceptionを捕まえることによって、起こりうるすべての例外について何をすべきかを知っていると主張しています。

適切な待機によってtry/catchなしでこれを行うことができます。その後、すべての待機が完了した後、その結果を主張することができます。

関連する問題