2017-02-10 59 views
-1

例如下面的代碼應該捕獲異常:Exceptions和TestNG和Eclipse的問題?

  1. 異常被輸出到控制檯window == correct
  2. 異常不顯示爲上testNg == wrong

任何想法失敗這是爲什麼發生了什麼?

我的代碼:

public void scrollToElementByLocator() { 
    try { 
     driver.findElement(By.id("wrong locator")).click(); 
    } catch (Exception e) { 
     System.out.println("Exception! - unable to scroll to element, Exception: " + e.toString()); 
    } 
} 
+0

'的異常不顯示爲一個失敗的TestNG的==錯誤',在這種情況下,Console中是否顯示異常?還是將測試標爲失敗? –

+0

@Naveen輸出到控制檯,只是在TestNG eclipse控制檯上將dosnt顯示爲紅色,謝謝 – Gbru

+4

[爲什麼我的'等待方法'沒有失敗或捕獲異常?](http:// stackoverflow。 com/questions/42156532/why-is-my-wait-method-not-failing-or-catching-exception) – juherr

回答

1
TestNG marks a test as Fail, if the code inside the test raises any Exception. 

在你的代碼,因爲你是通過捕捉它處理你自己之外,沒有任何異常將被提升到主叫方,這樣,TestNG從來不知道代碼中出現異常。

刪除try-catch塊,所以異常會從測試中提出,所以TestNG可以將測試標記爲Fail

試試下面的代碼:

@Test 
public void scrollToElementByLocator() { 
     driver.findElement(By.id("wrong locator")).click(); 
} 

注意:必須以@Test註釋標記的方法,告訴TestNG,它是一個測試方法。


如果你想執行一些操作,如果發生異常,那麼試試下面的代碼(扔你使用throw關鍵字捕獲的除外):

@Test 
public void scrollToElementByLocator() { 
    try { 
     driver.findElement(By.id("wrong locator")).click(); 
    } catch (Exception e) { 
     System.out.println("Exception! - unable to scroll to element, Exception: " + e.toString()); //prints the exception 
    throw e; 
    } 
} 
+0

感謝您的幫助,但是如果在故意使用了錯誤的定位器的情況下,測試未被標記爲異常,那麼放置在catch {}塊中的System.out.println是否不會被打印? – Gbru

+0

如果您使用錯誤的定位器(即與任何web元素不匹配的定位器),則將引發'NoSuchElementException',將傳遞給'catch'塊。所以,system.println打印消息。最好的方法是'永遠不要使用try和catch塊',除非你想逃離'已知失敗'。 –

+1

我強烈建議在'Java'中學習'異常處理',這將清除你所有的疑惑。這裏是官方文檔:https://docs.oracle.com/javase/tutorial/essential/exceptions/。你可以找到很多與之相關的文章。 –