RobotFramework Keyword: Failure Screenshot - 生死一瞬間,捕捉錯誤畫面

在Web testing中,常會使用到等待某些事件發生的keyword。如下圖使用了Wait Until Keyword Succeeds+Element Should Not Be Visible,其中三次之中失敗兩次。


RobotFramework會在這些keyword做retry時,capture下當時的screenshot。
650
假如每天都有跑自動測試且有保留報表的話,這些無用的圖片將會造成硬碟的負擔。尤其現在硬碟那麼貴,應該只要捕捉我們真正需要的圖片就好了!

Download This Keyword

在匯入SeleniumLibrary時,可以指定錯誤發生後要執行的動作。預設是在錯誤發生時,執行Capture Screenshot。這樣有兩個缺點,第一個是上面所提的:浪費空間;第二個是Capture Screenshot是抓取整個螢幕的畫面,如果你今天使用遠端去執行或螢幕保護程式啟動時,都將造成抓到的圖片是全黑的。針對這兩個缺點,我們可以這樣做:

  1. 取消Selenium預設動作。
  2. 在錯誤真正發生的時後,才去capture圖片,並改用Capture Page Screenshot抓圖。須注意有瀏覽器開著才會有用,否則會Fail。

取消Selenium預設動作

有兩種做法,一個是在Test Suite設定Library時,加入run_on_failure=Nothing參數;


也可以在testcase中,透過Impory Library的keyowrd將Selenium Library加入,並依樣給予run_on_failure=Nothing參數。


SeleniumLibrary允許你傳入許多參數,因此我偏好在使用時才去匯入。為此,通常我會將它與Start Selenium Server與啟動瀏覽器等動作一同放在TestSuite中。

錯誤發生時的動作

RobotFramework提供Run Keyword If Test FailedRun Keyword If Any Tests Failed,讓你可以對TestCase與TestSuite兩個Scope在測試失敗時,執行對應的Keyword。以下圖範例來說,我在TestSuite的TestTearDown中宣告了這個Keyword,這代表TestCase預設的Teardown將會確認如果有錯就會抓圖。而SuiteTearDown則是呼叫Suite Teardown的Keyword,去做Stop Selenium Server與有錯抓圖的動作。


這兩個Keyword除了使用在拍照外,你也可以把它做成發生錯誤就寄信通知或將軟體中的log給保留起來等動作,以方便debug。

友藏內心獨白: 這個Keyword能找到不少bug阿!