selenium關於斷言的使用


基本介紹:

Selenium工具專門為WEB應用程序編寫的一個驗收測試工具。

Selenium的核心:browser bot,是用JAVASCRIPT編寫的。

Selenium工具有4種:Selenium IDE, Selenium Control, Selenium Core

這兒我們主要總結了Selenium-IDE工具

Selenium-IDE只限於firefox瀏覽器中使用。

 

Selenium命令分成三類:

操作(action)、輔助(accessors)和斷言(assertion):

操作action:

模擬用戶與 Web 應用程序的交互。一般用於操作應用程序的狀態。

如點擊鏈接,選擇選項的方式進行工作。如果一個動作執行失敗,或是有錯誤,當前的測試將會停止執行。

操作中常見命令有:open(打開頁面)

click(點擊)

clickAndWait(點擊並等待)

type(文本類型)

select(選擇下拉菜單)

selectWindow(選擇彈出窗口)

pause(等待指定時間,以毫秒為單位,即要睡眠的時間)

setSpeed(設定執行速度。以毫秒延遲間隔長度。默認沒有延遲,即為0)

setTimeout(指定等待動作完成的等待時間。默認為30秒。

需要等待的動作包括了OPEN 和WAITFOR)

goBack(模擬用戶點擊其瀏覽器上的“back”按鈕)

close(模擬用戶點擊彈出窗體或表單標題欄上的”關閉”按鈕)

click與clickAndWait的區別:

例如對比錄制腳本:

Comand      Target

click             css=input[type=submit]           //句一

clickAndWait  css=input[type=submiit]          //句二

轉成PHPUNIT后代碼為:

$this->click(“css=input[type=submit]“);        //此句對應上面的 句一

$this->click(“css=input[type=submit]“);        //此句和下一句,對應上面的 句二

$this->waitForPageToLoad(“30000″);

區別在於:clickAndWait后會有一個默認的頁面等待時間為30秒;而click沒有等待時間;

Andwait這個后綴,告訴我們,該命令將使瀏覽器向服務器產生一個請求,使Selenium等待加載一個新的頁面。

 

輔助accessors:

這是輔助工具。用於檢查應用程序的狀態並將結果存儲到變量中。

如:storeElementPresent(locator,variableName)

其中參數:locator 表示元素定位器;variableName 用於存儲結果的變量名。

即將locator定位到的狀態存儲到variableName變量中。

如果該元素出現返回true,否則返回false

可同斷言一同使用。

 

斷言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:傳入一個不被期望的值,即使類型正確

 UnitTest框架中的斷言

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

 

例子:

>>> try:
    num = input("Enter a number:")
    assert (num == 10),"The number is not 10"
except AssertionError,msg:
    print msg
    print ("Sadly ,num not equals to 10")

    
Enter a number:10


====================================
>>> try:
    num = input("Enter a number:")
    assert (num == 10),"The number is not 10"
except AssertionError,msg:
    print msg
    print ("Sadly ,num not equals to 10")

    
Enter a number:20
The number is not 10
Sadly ,num not equals to 10

文件顯示:

# -*- coding:utf-8 -*-

import unittest

class Assert_test(unittest.TestCase):

    def test_case(self):
        try:
            num = input("Enter a number")
            self.assertEqual(num, 10, msg="The number is not 10"),
        except AssertionError, msg:
            print msg


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM