Webdriver API之操做(一)

一. 控制瀏覽器web

1. 控制瀏覽器大小windows

driver.set_window_size(480,800)  #瀏覽器寬480,高800顯示瀏覽器

dirver.maximize_window()  #瀏覽器最大化顯示ide

 

2. 後退、前進ui

driver.back()url

driver.forward()spa

 

3. 瀏覽器刷新(F5)3d

driver.refresh()code

 

2、  簡單元素操做:find_element_by_id("xx").+ ?orm

clear()    清除文本

send_keys(*value)   模擬按鍵輸入 

click()    單擊元素

 

size  返回元素的尺寸

text  獲取元素的文本

get_attribute(name)  獲取name的屬性值

is_displayed()  該元素是否可見

 

3、 鼠標操做

關於鼠標操做的方法封裝在ActionChains類中,因此要引用這個類

perform()    執行全部ActionChains種存儲的行爲

context_click()    右擊

double_click()    雙擊

drag_and_drop()    拖動

move_to_element()    鼠標懸停

1 from selenium import webdriver #引入ActionChains類 
2 from selenium.webdriver.common.action_chains import ActionChains
3 
4 driver = webdriver.Chrome() driver.get("http://yunpan.360.cn")
5 #定位到要右擊的元素 
6 right_click =driver.find_element_by_id("xx") 
7 #對定位到的元素執行鼠標右鍵操做,調用ActionChains()類,將驅動driver做爲參數傳入
8 ActionChains(driver).context_click(right_click).perform()
鼠標右擊操做
1 # ====同上,定位要懸停的元素
2 above = driver.find_element_by_id("id")
3 # 對元素執行懸停操做
4 ActionChains(driver).move_to_element(above).perform()
鼠標懸停
1 # ====同上,定位要雙擊元素
2 double_click = driver.find_element_by_id("id")
3 # 對元素執行雙擊操做
4 ActionChains(driver).double_click(double_click).perform()
雙擊操做
1 #===同上,定位元素的原位置
2 element = driver.find_element_by_id("id")
3 
4 # 定位元素要移動到的目標位置
5 target = driver.find_element_by_id("xx")
6 
7 # 執行元素的拖放操做
8 ActionChains(driver).drag_and_drop(element,target).perform()
鼠標拖放操做

 

4、 鍵盤事件

 1 …… #coding=utf-8 
 2 from selenium import webdriver 
 3 #引入Keys模塊 
 4 from selenium.webdriver.common.keys import Keys
 5 
 6 
 7 driver = webdriver.Firefox() driver.get("http://www.baidu.com")
 8 
 9 #輸入框輸入內容 driver.find_element_by_id("kw").send_keys("seleniumm")
10 
11 #刪除多輸入的一個m driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
12 
13 #輸入空格鍵+「教程」 driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys(u"教程")
14 
15 #ctrl+a 全選輸入框內容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
16 
17 #ctrl+x 剪切輸入框內容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
18 
19 #ctrl+v 粘貼內容到輸入框 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
20 
21 #經過回車鍵盤來代替點擊操做 driver.find_element_by_id("su").send_keys(Keys.ENTER)
22 
23 driver.quit()
鍵盤事件示例

fromselenium.webdriver.common.keys importKeys
在使用鍵盤按鍵方法前須要先導入 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

 

 

五. 得到驗證信息(titile、URL、TEXT)

driver.titile    # 獲取當前頁面title

driver.current_url  # 獲取當前頁面URL

driver.find_element_by_id("kw").text  #獲取當前元素的文本

 

六. 設置元素等待

1. 顯式等待

使webdriver等待某個條件成立時繼續執行,即默認每隔一段時間檢測一次until True,不然在達到最大時長拋出超時異常(TimeoutException)

 1 #coding=utf-8
 2 
 3 from selenium import webdriver from selenium.webdriver.common.by import By
 4 
 5 from selenium.webdriver.support.ui import WebDriverWait
 6 
 7  
 8 
 9 from selenium.webdriver.support import expected_conditions as EC  #導入EC
10 
11 driver = webdriver.Chrome()
12 
13 driver.get("http://www.baidu.com")
14 
15 # 超時時間5s內,檢測間隔0.5S,直到「kw」元素存在,超時不存在拋出異常
16 element = WebDriverWait(driver,5,0.5).until(
17 
18       EC.presence_of_element_located((By.ID,"kw"))
19 
20 )
21 
22 element.send_keys('selenium')
23 
24 driver.quit()
顯式等待示例

在本例中,咱們在使用 expected_conditions 類時對其時行了重命名,經過 as 關鍵字對其重命名爲 EC, 並調用 presence_of_element_located()判斷元素是否存在。

 

詳情請看下面:

WebDriverWait類是由WebDriver提供的等待方法,

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

driver - WebDriver 的驅動程序(Ie, Firefox,Chrome 等)
timeout - 最長超時時間,默認以秒爲單位
poll_frequency  - 休眠時間的間隔(步長)時間,默認爲 0.5 秒
ignored_exceptions - 超時後的異常信息,默認狀況下拋 NoSuchElementException 異常。

until()
WebDriverWait()通常由 until()(或 until_not())方法配合使用,下面是 until()和 until_not()方法的說明。
until(method,message=’’)
調用該方法提供的驅動程序做爲一個參數,直到返回值爲 Ture。
until_not(method,message=’’)
調用該方法提供的驅動程序做爲一個參數,直到返回值爲 False。

 

expected_conditions     類提供一些預期條件的實現:
title_is             用於判斷標題是否 xx。
title_contains         用於判斷標題是否包含 xx 信息。
presence_of_element_located 元素是否存在。
visibility_of_element_located   元素是否可見。
visibility_of           是否可見

presence_of_all_elements_located    判斷一組元素的是否存在

text_to_be_present_in_element     判斷元素是否有 xx 文本信息
text_to_be_present_in_element_value   判斷元素值是否有 xx 文本信息
frame_to_be_available_and_switch_to_it 表單是否可用,並切換到該表單。
invisibility_of_element_located       判斷元素是否隱藏
element_to_be_clickable         判斷元素是否點擊,它處於可見和啓動狀態
staleness_of               等到一個元素再也不是依附於 DOM。
element_to_be_selected         被選中的元素。
element_located_to_be_selected     一個指望的元素位於被選中。
element_selection_state_to_be     一個指望檢查若是給定的元素被選中。
element_located_selection_state_to_be 指望找到一個元素並檢查是否選擇狀態
alert_is_present             預期一個警告信息

 

2. 隱式等待

隱式等待式經過必定的時長等待頁面上某元素加載完成。若是超出了設置的時長元素尚未被加載,則拋出NoSuchElementException異常。

Webdriver提供了implicitly_wait()方法來實現。它不針對頁面上的某一元素進行等待,輪詢的方式不斷地判斷元素是否被定位到。

 

driver.implicitly_wait(10)  默認秒爲單位

 

3. sleep休眠方式

由Python的time模塊提供,默認秒爲單位

 sleep(2)

 

7、多表單切換

在Web應用中常常會遇到frame/iframe表單嵌套頁面的應用,webdriver只能在一個頁面上對元素識別與定位,因此須要經過switch_to.frame()方法將當前定位的主體切換爲frame/iframe表單的內嵌頁面中。

最後能夠經過switch_to.parent_content()方法跳出當前一級表單——對應離它最近的switch_to.frame()方法。

切換iframe方法以下:

1. switch_to.frame()默承認以直接取表單的id或name屬性:

1 #切換到iframe(id = "if")
2 driver.switch_to_frame("if")
3 
4 #切換到iframe(name = "nf")
5 driver.switch_to_frame("nf")

 

2. 若是ifame沒有可用的id和name屬性,則能夠經過下面的方式進行定位。

1 #先經過xpth定位到iframe 
2 xf = driver.find_element_by_xpath('//*[@class="if"]')
3 
4 #再將定位對象傳給switch_to_frame()方法 driver.switch_to_frame(xf) 
5 …… 
6 driver.switch_to_default_content()

 

8、 多窗口切換

Webdriver提供了switch_to.window()方法,可實現兩個窗口之間的切換。

 1 #coding=utf-8 
 2 from selenium import webdriver
 3 driver = webdriver.Firefox() 
 4 driver.implicitly_wait(10) driver.get("http://www.baidu.com")
 5 
 6 #得到百度搜索窗口句柄 
 7 sreach_windows= driver.current_window_handle
 8 
 9 driver.find_element_by_link_text(u"當即註冊").click()
10 
11 #得到當前全部打開的窗口的句柄 
12 all_handles = driver.window_handles
13 #進入註冊窗口 
14 for handle in all_handles: 
15     if handle != sreach_windows:
16         driver.switch_to_window(handle) 
17         print '註冊窗口!' 
18         #……
19 #進入搜索窗口 
20 for handle in all_handles: 
21     if handle == sreach_windows:
22         driver.switch_to_window(handle) 
23         print '搜索窗口!'
24     
25 driver.quit()
26               
多窗口切換

window_handles:返回全部窗口的句柄到當前會話

current_window_handle:得到當前窗口句柄

switch_to.window():用於切換到相應的窗口

 

9、警告框處理

處理JavaScript所聲稱的alert、confirm以及prompt十分簡單,使用switch_to_alert()方法定位到alert、confirm以及prompt;

而後使用如下方法進行操做:

text:返回alert、confirm以及prompt中的文字信息

accept():接受現有的警告框

dismiss():解散現有警告框

send_keys(KeyToSend):發送文本至警告框。

例:

1 driver.switch_to_alert().accept()
相關文章
相關標籤/搜索