2017-06-24 36 views
0

我正在嘗試爲網站編寫測試腳本。我想在下一行代碼運行之前使用assert來驗證元素在頁面上,並調用該元素。使用C#,Selenium網絡驅動程序和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幾乎是不對的。在這種情況下,您可能會得到Selenium的AssertionException或超時。通過捕獲Exception您聲稱知道該出現的每種可能的例外情況。

您應該可以在沒有嘗試/抓住的情況下通過適當的等待來完成此操作。然後,等待完成後,您可以對結果進行斷言。

相關問題