一 前言
提起斷言,接觸過軟件測試相關工種的同學們,一定不會陌生。比如,功能測試/自動化測試判斷用例是否通過,靠的就是檢查測試結果與預期是否一致;稍微不同的是,功能測試的結果檢查是由人工完成的,而自動化測試是通過預先把期望結果寫入腳本,並與實際執行結果進行比對來完成的。這個比對的行爲就是斷言,依據斷言的結果是True或False判定用例執行通過或失敗。
在selenium系列的前四節,主要講解selenium核心的元素定位和操作技術,然而,如果自動化腳本缺少斷言,就無法準確獲得腳本的運行過程中是否存在非預期的情況,腳本本身就不能很好完成功能迴歸的使命。
二 斷言分類
斷言的本質是驗證某個功能點或腳本行爲是否符合預期,所以,方法和手段是多種的。如,python自帶的assert語句,unittest框架的assert方法,甚至用try…except捕獲異常來斷言等。在本文,主要介紹selenium提供的斷言模式,但並不是說,web ui自動化腳本開發中只能使用selenium提供的斷言模式,實際上也可以使用assert語句進行。
以下主要介紹Selenium斷言中的兩個模式:assert 、verify。
assert :斷言失敗時,測試終止。
Verify :斷言失敗時,測試會繼續執行,但會將錯誤信息寫入日誌。
三 如何選擇使用assert還是Verify呢?
其實,選擇使用assert還是Verify,取決於當執行失敗時,希望腳本如何處理。如果希望測試失敗時用例停止執行,方便檢查錯誤原因,使用assert;如果希望測試出現異常時仍然可以對後續內容進行檢驗,使用verify。
即,assert和Verify的區別是:Verify失敗後不影響腳本的繼續執行,而assert失敗後將終止腳本執行。
一個有用的思路是:
我們使用一個"assert"保證操作在正確的頁面上,然後跟着一堆的"verify"來驗證頁面元素、表單中的值,標籤等。
如下所示,我們打開一個頁面,然後assert斷言打開的是否標題爲“Selenium IDE”的頁面,如果斷言成功,則驗證頁面圖片和文字是否正確;否則,直接停止測試即可。
Command | Target | Value |
open | /projects/ide/ | |
assertTitle | Selenium IDE | |
verifyElementPresent | css=#mainContent img | |
verifyText | //table/tr/td/div/p | This is my text and it occurs right after the div inside the table. |
四 常用斷言總結
assertLocation:(判斷當前是在正確的頁面)
assertTitle:(檢查當前頁面的 title 是否正確)
assertValue:(檢查 input 的值, checkbox 或 radio,有值爲”on”無爲”off”)
assertSelected:(檢查 select 的下拉菜單中選中是否正確)
assertSelectedOptions:(檢查下拉菜單中的選項的是否正確)
assertText:(檢查指定元素的文本)
assertTextPresent:(檢查在當前給用戶顯示的頁面上是否有出現指定的文本)
assertTextNotPresent:(檢查在當前給用戶顯示的頁面上是否沒有出現指定的文本)
assertAttribute:(檢查當前指定元素的屬性的值)
assertTable:(檢查 table 裏的某個 cell 中的值)
assertEditable:(檢查指定的 input 是否可以編輯)
assertNotEditable:(檢查指定的 input 是否不可以編輯)
assertAlert:(檢查是否有產生帶指定 message 的 alert 對話框)
verifyTitle :(檢查預期的頁面標題)
verifyTextPresent :(驗證預期的文本是否在頁面上的某個位置)
verifyElementPresent:(驗證預期的UI元素,它的HTML標籤的定義,是否在當前網頁上)
verifyText:(覈實預期的文本和相應的HTML標籤是否都存在於頁面上)
verifyTable:(驗證表的預期內容)
五 其他資源
關於python學習、分享、交流,筆者開通了微信公衆號【小蟒社區】,感興趣的朋友可以關注下,歡迎加入,建立屬於我們自己的小圈子,一起學python。