自動化測試程式如何驗證網頁畫面?

自動化測試程式如何驗證網頁畫面?

這篇文章主要說明電腦自動化測試程式如何驗證網頁資訊與元件。

對於人眼來說我們可以很快的看出這個網頁是否顯示異常,

有沒有缺少任何網頁元件、位置是否正確、顏色,進一步驗證連結與功能是否正常運作。

但是對於電腦來說要如何讓電腦做這些驗證?

Selenium 是否有提供相關的API?

網頁元件是否有正常的顯示?

這些問題就是這篇會探討並且用 Selenium/Python 範例實作。

Google 首頁的驗證

我們用一個簡單的例子說明,

例如這個 Google 首頁,我們怎麼知道這個頁面是否成功訪問載入正常呢?

對於人眼來看,我們可以很快的立刻辨別,但是我們是用哪些特徵辨別這個網頁?

哪些特徵是電腦可以用來驗證該網頁呢? 筆者舉例如下:

  •  正中央的 Search Bar 是否有出現? Visibility?
  • Google Search 按鈕是否可以點擊 clickable?
  • Google 圖片是否有出現?
  • 最上方的連結是否有出現? Search, Images, Mags, YouTube等
  • 最下方的 Footer 是否有出現? About Google
  • Http Response Code 是否為 200
  • Page Title 是否為 “Google”

Selenium 的驗證 Expected Conditions

對於 Selenuim來說,我們主要用到的功能就是 expected_conditions

Expected Conditions 可以協助我們驗證網頁的狀態。標註紅色的部分為筆者建議比較常用,

可以讓自動化測試程式更穩定,減少因為網頁顯示或是下載時間的關係而造成的例外錯誤。

alert_is_present 驗證 alert 視窗是否存在
element_located_selection_state_to_beelement_located_to_be_selected

element_to_be_selected

驗證 Selection list 是否有被選取
element_to_be_clickable 該網頁元件是否可以被點選
frame_to_be_available_and_switch_to_it 遇到有 iframe的網頁時,可以先檢查該iframe是否已經載入成功
invisibility_of_element_located 該網頁元件是否看不到
presence_of_all_elements_locatedpresence_of_element_located 網頁元件是否存在
text_to_be_present_in_elementtext_to_be_present_in_element_value 特定文字是否出現在網頁元件中
title_containstitle_is 該網頁的 Page Title 驗證
visibility_ofvisibility_of_element_located 特定網頁是否出現? 與 present 不一樣的是 Visibility 還會檢查該網頁屬性 height/width 設定是否大於 0 

Source: https://selenium.googlecode.com/git/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html

 

 實作範例

通常 Expected Conditions 會與 WebDriverWait 一併使用。讓自動化測試程式”等待”,直到所預期的條件 (網頁元件出現、可以點擊)。

因此,程式要 import 有:

  • from selenium.webdriver.support.ui import WebDriverWait
  • from selenium.webdriver.support import expected_conditions

例如針對 google homePage 來說,可以用下列方試驗證

  • 驗證中間的 Search bar (name=”q”)出現,等10秒後timeout

SearchField = WebDriverWait(self.driver, 10).until(expected_conditions.visibility_of_element_located((By.NAME, “q”)))

 

  • 驗證語言選單中是否有三個選項

WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_id(“select-language”).get_attribute(“length”) == “3”)

 

  • 驗證Search Button 是否可以點擊。等10秒後 timeout。

Search_button = WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable((By.name, “btnk”)))

Search_button.click()

 

  • 驗證該網頁的 title 是否含有 Google

WebDriverWait(self.driver, 10).until(expected_conditions.title_contains(“Google”))

 

小結

在對網頁元件進行操作前,適時的透過這樣的方式驗證網頁與等待,

WebDriverWait 配合 expected_conditions的使用。

除了可以對於該網頁作基本的驗證之外,還可以讓自動化測試程式更穩定,

減少因為網路下載時間或是出現的時間差造成的程式例外錯誤。

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *