selenium元素定位方法

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 等。

 

須要說明的是, 上面的腳本沒有什麼實際意義, 僅向咱們展現模擬鍵盤各類按鍵與組合鍵的用法。

  • from selenium.webdriver.common.keys import Keys

在使用鍵盤按鍵方法前須要先導入 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方法在前面已經講過,它用於獲取標籤對之間的文本信息。 下面一樣以百度爲例,介紹如何獲取這些信息。

 

腳本運行結果以下:

 

  • title:用於得到當前頁面的標題。
  • current_url:用戶得到當前頁面的URL。
  • text:獲取搜索條目的文本信息。

設置元素等待

WebDriver提供了兩種類型的等待:顯式等待隱式等待

顯式等待

顯式等待使WebdDriver等待某個條件成立時繼續執行,不然在達到最大時長時拋出超時異常(TimeoutException)。

 

WebDriverWait類是由WebDirver 提供的等待方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,若是超過設置時間檢測不到則拋出異常。具體格式以下:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

  • driver :瀏覽器驅動。
  • timeout :最長超時時間,默認以秒爲單位。
  • poll_frequency :檢測的間隔(步長)時間,默認爲0.5S。
  • ignored_exceptions :超時後的異常信息,默認狀況下拋    NoSuchElementException異常。

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()方法,能夠實如今不一樣的窗口之間切換。 以百度首頁和百度註冊頁爲例,在兩個窗口之間的切換.

 

在本例中所涉及的新方法以下:

  • current_window_handle:得到當前窗口句柄。
  • window_handles:返回全部窗口的句柄到當前會話。
  • switch_to.window():用於切換到相應的窗口,與上一節的switch_to.frame()相似,前者用於不一樣窗口的切換,後者用於不一樣表單之間的切換。

警告框處理

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是否正確,由於基於真實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。

調用JavaScript代碼

雖然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() 關閉全部窗口

相關文章
相關標籤/搜索