2013-12-18 33 views
0

我在Eclipse/Java中使用硒和我有一個try/catch這樣的:硒和AssertTrue()連接

  try { 
     assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut")); 
     System.out.println("You Are Now Logged Out is present on the web page"); 
     } 
     catch (Throwable e) { 
     System.out.println("You Are Now Logged Out is NOT present on the web page"); 
     }   

我想我錯過了這個強迫失敗硒連接(xxxOut )如何讓Selenium將此報告爲失敗?我的TestNG報告我的腳本運行正常,但沒有失敗,但是如果我查看控制檯,我看到「您現在註銷不在網頁上」,所以我確實發生了故障(預期的文本不存在)。

謝謝...

回答

1

由於您已經發現失敗,測試已通過。如果您想記錄您的自定義消息並仍將其報告爲失敗,則應再次丟棄它。在sysout之後添加throw e,並將該情況報告爲失敗。

如果你不想記錄自定義消息,那麼不要抓住它。

0

首先,try/catch塊是否必要?如果沒有測試方法都可能拋出異常最好是保持簡單的測試

assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut")); 

如果失敗消息並不需要輸出到任何特定的輸出流,但要保留定製消息

String failureMsg = "You Are Now Logged Out is NOT present on the web page"; 
assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut"), failureMsg); 
String successMsg = "You Are Now Logged Out is present on the web page"; 
System.out.println(successMsg); 

如果日誌是在您的測試

try { 
    assertTrue(selenium.isTextPresent("You Are Now Logged xxxOut")); 
    System.out.println("You Are Now Logged Out is present on the web page"); 
} catch (Throwable e) { 
    String failureMsg = "You Are Now Logged Out is NOT present on the web page"; 
    fail(failureMsg, e) 
    System.out.println(failureMsg); 
} 

作爲一個風格問題絕對必要的,我更喜歡第一個選項。除非有令人信服的理由將代碼包裝在Try/Catch中,否則我會建議您不要這樣做,因爲:

  1. 根據所提供的代碼段不需要; assertTrue()調用會拋出一個AssertionError,它會使測試無法正常進行,並且有一個允許自定義消息的重載版本。捕獲所有Throwable實例將捕獲AssertionError實例並導致您重新拋出它(不必要的),或者調用失敗()(多餘的,它只是拋出一個新的AssertionError)
  2. 重新拋出比Asse田之外的異常會導致測試失敗,並錯誤條件,而不是一個失敗狀態,表明試驗失敗你沒有預料到的方式,這通常被認爲是更嚴重的錯誤

此外,通常不建議捕獲Throwable的實例。

+0

如果我刪除了try/catch,那麼我在TestNG報告中看到的唯一一條異常錯誤是143行。所以我想我可以看看源代碼來查看失敗的位置,但這不是非常友好。 如果我添加try/catch,我可以將一個msg記錄到控制檯,並確切地看到問題所在。但是,我想將控制檯輸出保存到文件中。我相信在Eclipse中這是可能的,但我不知道該怎麼做? – RalphF

+0

另一個奇怪的事情是這條線是有效的(它強制失敗,並且我得到指向控制檯中第143行的空指針異常: assertTrue(selenium。isTextPresent(「您現在已經登錄xxxOut」)); 但是這條線路通過並且它不應該: assertEquals(「您現在已經註銷」,driver.getPageSource()。contains(「You Are Logged xxxOut」)); 我不知道爲什麼這條線路通過? – RalphF