Python+Selenium筆記(七):WebDriver和WebElement,
(一) WebDriver
WebDriver提供許多用來與瀏覽器互動的功能和設定,通過WebDriver的功能和一些方法,來實現與瀏覽器視窗、警告、架構和快顯視窗的互動,它也提供了自動化操作瀏覽器導覽列、設定cookies、截屏等方便我們測試的特性。
(二) WebDriver功能及方法
功能/屬性 |
簡單說明 |
current_url |
擷取當前頁面的URL地址(driver.current_url) 下面的都是以這種方式,driver指瀏覽器驅動執行個體。 |
window_handle |
擷取當前視窗的控制代碼 |
name |
擷取該執行個體底層的瀏覽器名稱 |
orientation |
擷取當前裝置的方位 |
page_source |
擷取當前頁面原始碼 |
title |
擷取當前頁面的標題 |
window_handles |
擷取當前會話裡所有視窗的控制代碼 |
方法 |
簡單說明 |
close() |
關閉當前瀏覽器視窗 |
back() |
後退一步 |
forward() |
前進一步 |
get(url) |
訪問URL並載入網頁到當前的瀏覽器會話 |
maximize_window() |
最大化瀏覽器視窗 |
quit() |
退出當前的驅動執行個體並關閉所有相關視窗 |
refresh() |
重新整理當前頁面 |
implicitly_wait() |
等待時間,單位為秒 |
set_page_load_timeout() |
設定一個頁面完全載入完成的逾時等待時間,單位為秒 |
set_script_timeout() |
設定指令碼執行的逾時時間 |
(三) WebElement功能及方法
通過WebElement可以實現與網站頁面元素的互動,包括文字框、文本域、按鈕、單選框、多選框、表格、行、列和div等。
功能/屬性 |
簡單說明 |
size |
擷取元素大小(例如element.size) 下面都是以這種方式,element指定位的某個元素 |
tag_name |
擷取標籤的名稱 |
text |
擷取元素的文本值 |
方法 |
簡單說明 |
clear() |
清除文字框或文本域的內容 |
click() |
點擊元素 |
get_attribute(name) |
擷取元素的屬性值,name:要擷取的屬性名稱 |
is_displayed() |
檢查元素對於使用者是否可見 |
is_enabled() |
檢查元素是否可用 |
is_selected() |
檢查元素是否被選中,主要用於單選框和複選框 |
send_keys(value) |
輸入文本,value是要輸入的值 |
submit() |
提交表單。如果對元素使用,將會提交該元素所屬的表單 |
value_of_css_property(property_name) |
擷取CSS屬性的值, property_name是CSS屬性的名稱 |
(四) 動作表單、文字框、複選框、選項按鈕
通過WebElement實現與各種HTML控制項的自動化互動,例如在一個文字框輸入文本、單擊按鈕、選擇單選框或者複選框、擷取元素的文本及屬性值等。
例如,部落格園註冊功能的自動化:
(這裡只是舉個例子哈,直接複製是沒用的,下面的代碼只定位部分欄位(郵箱、登入名稱和註冊按鈕),而且沒有處理驗證碼,驗證碼部分以後再研究怎麼處理)
1 def test_register_new_user(self): 2 3 #定位並點擊部落格園首頁的 註冊 4 5 login_area = self.driver.find_element_by_css_selector('#login_area') 6 7 register = login_area.find_element_by_link_text('註冊') 8 9 register.click()10 11 #檢查開啟的網頁標題是不是'使用者註冊 - 部落格園'12 13 self.assertTrue('使用者註冊 - 部落格園' == self.driver.title)14 15 # 定位註冊頁面各個欄位及註冊按鈕16 17 user_email = self.driver.find_element_by_id('Email')18 19 user_login_name = self.driver.find_element_by_id('LoginName')20 21 register_btn = self.driver.find_element_by_id('submitBtn')22 23 # 檢查欄位允許的最大輸入字元與最小輸入字元是否與預期一致24 25 self.assertEqual('2', user_login_name.get_attribute('data-val-length-min'))26 27 self.assertEqual('30', user_login_name.get_attribute('data-val-length-max'))28 29 # 檢查各個欄位及按鈕對使用者是否可見及可用30 31 self.assertTrue(user_email.is_displayed() and user_email.is_enabled())32 33 # 輸入使用者資訊34 35 user_email.send_keys('test@163.com')36 37 user_login_name.send_keys('test')38 39 # 點擊註冊按鈕40 41 register_btn.click()42 43 # 檢查是否顯示註冊成功的提示44 45 self.assertTrue(self.driver.find_element_by_css_selector('p.txt-title.success-color').text == '註冊成功')
例如,可以使用下面的方式檢查部落格園登入頁面的複選框是否被選中
1 def test_login(self): 2 3 …省略開啟登入頁面的代碼(這段就不注釋了#) 4 5 automatic_login = self.driver.find_element_by_id('remember_me') 6 7 #檢查登入頁面複選框,是否預設不被選中 8 9 self.assertFalse(automatic_login.is_selected())10 11 #點擊選中複選框12 13 automatic_login.click()