Selenium提供了8種定位方式。css
idhtml
nameweb
class name瀏覽器
tag namecookie
link text函數
partial link text測試
xpathui
css selectorurl
這8種定位方式在Python selenium中所對應的方法爲:spa
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
driver.set_window_size(480,800)
driver.refresh() #刷新當前頁面
clear(): 清除文本。
send_keys (value): 模擬按鍵輸入。
click(): 單擊元素。
submit()
submit()方法用於提交表單。 例如, 在搜索框輸入關鍵字以後的「回車」 操做, 就能夠經過該方法模擬。
size: 返回元素的尺寸。
text: 獲取元素的文本。
get_attribute(name): 得到屬性值。
is_displayed(): 設置該元素是否用戶可見。
輸出結果:
執行上面的程序並查看結果: size 方法用於獲取百度輸入框的寬、 高, text 方法用於得到百度底部的備案信息, get_attribute()用於得到百度輸入的 type 屬性的值, is_displayed()用於返回一個元素是否可見, 若是可見則返回 True, 不然返回 False。
在 WebDriver 中, 將這些關於鼠標操做的方法封裝在 ActionChains 類提供。
ActionChains 類提供了鼠標操做的經常使用方法:
perform(): 執行全部 ActionChains 中存儲的行爲;
context_click(): 右擊;
double_click(): 雙擊;
drag_and_drop(): 拖動;
move_to_element(): 鼠標懸停。
from selenium.webdriver import ActionChains
導入提供鼠標操做的 ActionChains 類。
ActionChains(driver)
調用 ActionChains()類, 將瀏覽器驅動 driver 做爲參數傳入。
move_to_element(above)
context_click()方法用於模擬鼠標右鍵操做, 在調用時須要指定元素定位。
perform()
執行全部 ActionChains 中存儲的行爲, 能夠理解成是對整個操做的提交動做。
Keys()類提供了鍵盤上幾乎全部按鍵的方法。 前面瞭解到, send_keys()方法能夠用來模擬鍵盤輸入, 除此 以外, 咱們還能夠用它來輸入鍵盤上的按鍵, 甚至是組合鍵, 如 Ctrl+A、 Ctrl+C 等。
須要說明的是, 上面的腳本沒有什麼實際意義, 僅向咱們展現模擬鍵盤各類按鍵與組合鍵的用法。
在使用鍵盤按鍵方法前須要先導入 keys 類。
send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)
send_keys(Keys.SPACE) 空格鍵(Space)
send_keys(Keys.TAB) 製表鍵(Tab)
send_keys(Keys.ESCAPE) 回退鍵(Esc)
send_keys(Keys.ENTER) 回車鍵(Enter)
send_keys(Keys.CONTROL,‘a’) 全選(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 複製(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘貼(Ctrl+V)
send_keys(Keys.F1) 鍵盤 F1
……
send_keys(Keys.F12) 鍵盤 F12
不論是在作功能測試仍是自動化測試,最後一步須要拿實際結果與預期進行比較。這個比較的稱之爲斷言。
咱們一般能夠經過獲取title 、URL和text等信息進行斷言。text方法在前面已經講過,它用於獲取標籤對之間的文本信息。 下面一樣以百度爲例,介紹如何獲取這些信息。
腳本運行結果以下:
WebDriver提供了兩種類型的等待:顯式等待和隱式等待。
顯式等待使WebdDriver等待某個條件成立時繼續執行,不然在達到最大時長時拋出超時異常(TimeoutException)。
WebDriverWait類是由WebDirver 提供的等待方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,若是超過設置時間檢測不到則拋出異常。具體格式以下:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
WebDriverWait()通常由until()或until_not()方法配合使用,下面是until()和until_not()方法的說明。 * until(method, message=‘’) 調用該方法提供的驅動程序做爲一個參數,直到返回值爲True。 * until_not(method, message=‘’) 調用該方法提供的驅動程序做爲一個參數,直到返回值爲False。
在本例中,經過as關鍵字將expected_conditions 重命名爲EC,並調用presence_of_element_located()方法判斷元素是否存在。
WebDriver提供了implicitly_wait()方法來實現隱式等待,默認設置爲0。它的用法相對來講要簡單得多。
implicitly_wait()默認參數的單位爲秒,本例中設置等待時長爲10秒。首先這10秒並不是一個固定的等待時間,它並不影響腳本的執行速度。其次,它並不針對頁面上的某一元素進行等待。當腳本執行到某個元素定位時,若是元素能夠定位,則繼續執行;若是元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,若直到超出設置時長(10秒)尚未定位到元素,則拋出異常。
WebDriver還提供了8種用於定位一組元素的方法。
定位一組元素的方法與定位單個元素的方法相似,惟一的區別是在單詞element後面多了一個s表示複數。
接下來經過例子演示定位一組元素的使用:
程序運行結果:
在Web應用中常常會遇到frame/iframe表單嵌套頁面的應用,WebDriver只能在一個頁面上對元素識別與定位,對於frame/iframe表單內嵌頁面上的元素沒法直接定位。這時就須要經過switch_to.frame()方法將當前定位的主體切換爲frame/iframe表單的內嵌頁面中。
126郵箱登陸框的結構大概是這樣子的,想要操做登陸框必需要先切換到iframe表單。
switch_to.frame() 默承認以直接取表單的id 或name屬性。若是iframe沒有可用的id和name屬性,則能夠經過下面的方式進行定位。
除此以外,在進入多級表單的狀況下,還能夠經過switch_to.default_content()跳回最外層的頁面。
在頁面操做過程當中有時候點擊某個連接會彈出新的窗口,這時就須要主機切換到新打開的窗口上進行操做。WebDriver提供了switch_to.window()方法,能夠實如今不一樣的窗口之間切換。 以百度首頁和百度註冊頁爲例,在兩個窗口之間的切換.
在本例中所涉及的新方法以下:
在WebDriver中處理JavaScript所生成的alert、confirm以及prompt十分簡單,具體作法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,而後使用text/accept/dismiss/ send_keys等方法進行操做。
text:返回 alert/confirm/prompt 中的文字信息。
accept():接受現有警告框。
dismiss():解散現有警告框。
send_keys(keysToSend):發送文本至警告框。keysToSend:將文本發送至警告框。
經過switch_to_alert()方法獲取當前頁面上的警告框,並使用accept()方法接受警告框。
有時咱們會碰到下拉框,WebDriver提供了Select類來處理下拉框。
Select類用於定位select標籤。 select_by_value() 方法用於定位下接選項中的value值。
對於經過input標籤實現的上傳功能,能夠將其看做是一個輸入框,即經過send_keys()指定本地文件路徑的方式實現文件上傳。
建立upfile.html文件,代碼以下:
經過瀏覽器打開upfile.html文件,功能以下圖。
接下來經過send_keys()方法來實現文件上傳。
有時候咱們須要驗證瀏覽器中cookie是否正確,由於基於真實cookie的測試是沒法經過白盒和集成測試進行的。WebDriver提供了操做Cookie的相關方法,能夠讀取、添加和刪除cookie信息。
WebDriver操做cookie的方法:
get_cookies(): 得到全部cookie信息。
get_cookie(name): 返回字典的key爲「name」的cookie信息。
add_cookie(cookie_dict) : 添加cookie。「cookie_dict」指字典對象,必須有name 和value 值。
delete_cookie(name,optionsString):刪除cookie信息。「name」是要刪除的cookie的名稱,「optionsString」是該cookie的選項,目前支持的選項包括「路徑」,「域」。
delete_all_cookies(): 刪除全部cookie信息。
下面經過get_cookies()來獲取當前瀏覽器的cookie信息。
從執行結果能夠看出,cookie數據是以字典的形式進行存放的。知道了cookie的存放形式,接下來咱們就能夠按照這種形式向瀏覽器中寫入cookie信息。
從執行結果能夠看到,最後一條cookie信息是在腳本執行過程當中經過add_cookie()方法添加的。經過遍歷獲得全部的cookie信息,從而找到key爲「name」和「value」的特定cookie的value。
雖然WebDriver提供了操做瀏覽器的前進和後退方法,但對於瀏覽器滾動條並無提供相應的操做方法。在這種狀況下,就能夠藉助JavaScript來控制瀏覽器的滾動條。WebDriver提供了execute_script()方法來執行JavaScript代碼。
用於調整瀏覽器滾動條位置的JavaScript代碼以下:
window.scrollTo()方法用於設置瀏覽器窗口滾動條的水平和垂直位置。方法的第一個參數表示水平的左間距,第二個參數表示垂直的上邊距。其代碼以下:
經過瀏覽器打開百度進行搜索,而且提早經過set_window_size()方法將瀏覽器窗口設置爲固定寬高顯示,目的是讓窗口出現水平和垂直滾動條。而後經過execute_script()方法執行JavaScripts代碼來移動滾動條的位置。
自動化用例是由程序去執行的,所以有時候打印的錯誤信息並不十分明確。若是在腳本執行出錯的時候能對當前窗口截圖保存,那麼經過圖片就能夠很是直觀地看出出錯的緣由。WebDriver提供了截圖函數get_screenshot_as_file()來截取當前窗口。
腳本運行完成後打開D盤,就能夠找到baidu_img.jpg圖片文件了。
在前面的例子中咱們一直使用quit()方法,其含義爲退出相關的驅動程序和關閉全部窗口。除此以外,WebDriver還提供了close()方法,用來關閉當前窗口。例多窗口的處理,在用例執行的過程當中打開了多個窗口,咱們想要關閉其中的某個窗口,這時就要用到close()方法進行關閉了。
close() 關閉單個窗口
quit() 關閉全部窗口