Selenium3 + Python3自動化測試系列五——常用斷言Assertion

斷言Assertion

驗證應用程序的狀態是否同所期望的一致。

常見的斷言包括:驗證頁面內容,如標題是否爲X或當前位置是否正確,或是驗證該複選框是否被勾選。

selenium 提供了三種模式的斷言:assert 、verify、waitfor

  Assert 失敗時,該測試將終止。

  Verify 失敗時,該測試將繼續執行,並將錯誤記入日顯示屏 。也就是說允許此單個 驗證通過。確保應用程序在正確的頁面上

  Waitfor 用於等待某些條件變爲真。可用於 AJAX 應用程序的測試。

  如果該條件爲真,他們將立即成功執行。如果該條件不爲真,則將失敗並暫停測試。直到超過當前所設定的超過時間。

      一般跟setTimeout時間一起使用。

一、常用斷言

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(驗證表的預期內容)

waitForPageToLoad(暫停執行,直到預期的新的頁面加載)

waitForElementPresent (等待檢驗某元素的存在。爲真時,則執行。)

驗證和斷言的區別:驗證失敗後不影響腳本的繼續執行,斷言失敗後將停止腳本的執行。

二、異常類型

AssertionError:assert語句失敗

AttributeError:試圖訪問一個對象沒有的屬性

IOError:輸入輸出異常,基本是無法打開文件

ImportError:無法引入模塊或者包,基本是路徑問題

IndentationError:語法錯誤,代碼沒有正確的對齊

IndexError:下標索引超出序列邊界

KeyError:試圖訪問字典裏不存在的鍵

KeyboadrInterrupt:Ctrl+c被按下

NameError:使用一個還未賦值對象的變量

SyntaxError:python代碼邏輯語法錯誤,不能執行

TypeError:傳入的對象類型與要求不符

UnboundLocalError:試圖訪問一個還未設置的全局變量,基本上是由於另有一個同名的全局變量,導致你以爲在訪問

ValueError:傳入一個不被期望的值,即使類型正確

 我們來看舉個栗子,python3 +selenium3,驗證標題是否包含‘百度一我’:

from selenium.webdriver import Chrome
import time
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get('https://www.baidu.com')
try:
    assert u"百度一我" in driver.title
    print("Assertion test pass")
except Exception as e:
    print("Assertion test fail",format(e))
print(driver.title)
time.sleep(5)
driver.quit()

結果如下:

三、UnitTest框架中的斷言

在unittest單元測試框架中,TestCase類提供了一些方法來檢查並報告故障

assertEqual(a,b,[msg='測試失敗時打印的信息']): 斷言a和b是否相等,相等則測試用例通過。

assertNotEqual(a,b,[msg='測試失敗時打印的信息']): 斷言a和b是否相等,不相等則測試用例通過。

assertTrue(x,[msg='測試失敗時打印的信息']): 斷言x是否True,是True則測試用例通過。

assertFalse(x,[msg='測試失敗時打印的信息']): 斷言x是否False,是False則測試用例通過。

assertIs(a,b,[msg='測試失敗時打印的信息']): 斷言a是否是b,是則測試用例通過。

assertNotIs(a,b,[msg='測試失敗時打印的信息']): 斷言a是否是b,不是則測試用例通過。

assertIsNone(x,[msg='測試失敗時打印的信息']): 斷言x是否None,是None則測試用例通過。

assertIsNotNone(x,[msg='測試失敗時打印的信息']): 斷言x是否None,不是None則測試用例通過。

assertIn(a,b,[msg='測試失敗時打印的信息']): 斷言a是否在b中,在b中則測試用例通過。

assertNotIn(a,b,[msg='測試失敗時打印的信息']): 斷言a是否在b中,不在b中則測試用例通過。

assertIsInstance(a,b,[msg='測試失敗時打印的信息']): 斷言a是是b的一個實例,是則測試用例通過。

assertNotIsInstance(a,b,[msg='測試失敗時打印的信息']): 斷言a是是b的一個實例,不是則測試用例通過。

我們來小試一下牛刀:

class assertEqual1(unittest.TestCase):
    def setUp(self):
        number = input ("Enter a number:")
        self.number = int (number)

    def test_case(self):
        self.assertEqual (self.number, 10, msg='Your input is not 10!')

    def tearDown(self):
        pass

if __name__ == '__main__':
    unittest.main ()

   這裏我先簡單介紹一下常用斷言,具體的如何使用應具體應用而定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章