在使用 Selenium WebDriver 做自動(dòng)化測試的時(shí)候,會(huì)經(jīng)常模擬鼠標(biāo)和鍵盤的一些行為。比如使用鼠標(biāo)單擊、雙擊、右擊、拖拽等動(dòng)作;或者鍵盤輸入、快捷鍵使用、組合鍵使用等模擬鍵盤的操作。在 WebDeriver 中,有一個(gè)專門的類來負(fù)責(zé)實(shí)現(xiàn)這些測試場景,那就是 ActionChains類,在使用該類做鍵盤操作的過程中會(huì)配合使用到 Keys 數(shù)據(jù)存儲(chǔ)類,Keys包含鍵盤上所有特殊按鍵。
一、鼠標(biāo)點(diǎn)擊操作
click(element=None) 左擊
context_click(element=None) 右擊
double_click(element=None) 雙擊
move_to_element(element) 移動(dòng)鼠標(biāo)到元素中間(懸停)
drag_and_drop(source,target) source上按下左鍵拖動(dòng)到target元素上
click_and_hold(element=None) 在元素上按下鼠標(biāo)左鍵
release() 釋放鼠標(biāo)
perform() 執(zhí)行ActionChains中存儲(chǔ)的動(dòng)作
element有None默認(rèn)值的表示不傳入?yún)?shù)該動(dòng)作在原地執(zhí)行。
鼠標(biāo)事件具體使用示例如下:
示例1:鼠標(biāo)左鍵點(diǎn)擊
action=ActionChains(driver)
action.click() # 在鼠標(biāo)當(dāng)前位置單擊
action.perform() # 執(zhí)行action存儲(chǔ)的動(dòng)作
# 鼠標(biāo)在 '新聞' 元素位置單擊
action.click(driver.find_element_by_link_text('新聞')).perform()
注意:action.click() 動(dòng)作并未執(zhí)行,它只是存儲(chǔ)在action實(shí)例中,需要通過action.perform()方法執(zhí)行存儲(chǔ)動(dòng)作;鼠標(biāo)鍵盤事件動(dòng)作動(dòng)作可以存儲(chǔ)多個(gè),然后一次性執(zhí)行。如下執(zhí)行Cytl+C:
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
示例2:鼠標(biāo)右擊
action=ActionChains(driver)
action.context_click().perform() # 在鼠標(biāo)當(dāng)前位置右擊
# 鼠標(biāo)在 '新聞' 元素位置右擊
action.context_click(driver.find_element_by_link_text('新聞')).perform()
示例3:鼠標(biāo)雙擊操作
action=ActionChains(driver)
action.double_click().perform() # 在鼠標(biāo)當(dāng)前位置雙擊
# 鼠標(biāo)在 '新聞' 元素位置雙擊擊
action.double_click(driver.find_element_by_link_text('新聞')).perform()
示例4:鼠標(biāo)移動(dòng)
action = ActionChains(driver)
element=driver.find_element_by_link_text('設(shè)置')
# 鼠標(biāo)移動(dòng)到 '新聞' 元素上的中心點(diǎn)
action.move_to_element(element).perform()
# 鼠標(biāo)在原位置向x軸移動(dòng)xoffset、y軸移動(dòng)yoffset;xoffset、yoffset可為正負(fù)數(shù)
action.move_by_offset(-200,100).perform()
# 鼠標(biāo)移動(dòng)到element元素中心點(diǎn)偏移xoffset、yoffset
action.move_to_element_with_offset(element,-500,600).perform()
action.move_by_offset(xoffset,yoffset) 這里需要注意,如果 xoffset 為負(fù)數(shù),表示橫坐標(biāo)向左移動(dòng),yoffset 為負(fù)數(shù)表示縱坐標(biāo)向上移動(dòng)。而且如果這兩個(gè)值大于當(dāng)前屏幕的大小,鼠標(biāo)只能移到屏幕最邊界的位置。
鼠標(biāo)移動(dòng)操作在測試環(huán)境中比較常用到的場景是需要獲取某元素的 flyover/tips,實(shí)際應(yīng)用中很多 flyover 只有當(dāng)鼠標(biāo)移動(dòng)到這個(gè)元素之后才出現(xiàn),所以這個(gè)時(shí)候通過執(zhí)行 move_to_element(to_element) 操作,就能達(dá)到預(yù)期的效果。
根據(jù)我個(gè)人的經(jīng)驗(yàn),這個(gè)方法對(duì)于某些特定產(chǎn)品的圖標(biāo)的 flyover/tips 也不起作用,雖然在手動(dòng)操作的時(shí)移動(dòng)鼠標(biāo)到這些圖標(biāo)上面可出現(xiàn) flyover,但當(dāng)使用 WebDriver 來模擬這一操作時(shí),雖然方法成功執(zhí)行,但 flyover 卻不出來。所以在實(shí)際應(yīng)用中,還需要對(duì)具體的產(chǎn)品頁面做相應(yīng)的處理。
現(xiàn)在我也找了很多測試的朋友,做了一個(gè)分享技術(shù)的交流群,共享了很多我們收集的技術(shù)文檔和視頻教程。
如果你不想再體驗(yàn)自學(xué)時(shí)找不到資源,沒人解答問題,堅(jiān)持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動(dòng)化,性能,安全,測試開發(fā)等等方面有一定建樹的技術(shù)大牛
分享他們的經(jīng)驗(yàn),還會(huì)分享很多直播講座和技術(shù)沙龍
可以免費(fèi)學(xué)習(xí)!劃重點(diǎn)!開源的!??!
qq群號(hào):110685036
示例5:鼠標(biāo)懸停
action.click_and_hold().perform() # 鼠標(biāo)在當(dāng)前位置按下并不釋放
# 鼠標(biāo) 在'設(shè)置' 上懸停
action.click_and_hold(driver.find_element_by_link_text('設(shè)置')).perform()
action.click_and_hold(element) 這個(gè)方法實(shí)際上是執(zhí)行了兩個(gè)動(dòng)作,首先是鼠標(biāo)移動(dòng)到元素 element,然后再 click_and_hold, 所以這個(gè)方法也可以寫成 action.move_to_element(element).click_and_hold()。
示例6:鼠標(biāo)拖拽
source = driver.find_element_by_id("kw") # 獲取起始位置元素
target = driver.find_element_by_id("sk") # 獲取目標(biāo)元素
# 將元素source拖動(dòng)到target的位置
ActionChains(driver).drag_and_drop(source, target).perform()
# 鼠標(biāo)拖拽動(dòng)作,將 source 元素向x、y軸方向移動(dòng) (xoffset, yoffset) ,其中 xoffset 為橫坐標(biāo),yoffset 為縱坐標(biāo)。
ActionChains(driver).drag_and_drop_by_offset(source, -100, 100).perform()
在這個(gè)拖拽的過程中,已經(jīng)使用到了鼠標(biāo)的組合動(dòng)作,首先是鼠標(biāo)點(diǎn)擊并按住 click_and_hold( source) 元素,然后執(zhí)行鼠標(biāo)移動(dòng)動(dòng)作 (move_to),移動(dòng)到 target 元素位置或者是 (xoffset, yoffset) 位置,再執(zhí)行鼠標(biāo)的釋放動(dòng)作 (release)。所以上面的方法也可以拆分成以下的幾個(gè)執(zhí)行動(dòng)作來完成:
ActionChains(driver).click_and_hold(source).move_to_element(target).release().perform()
示例7:鼠標(biāo)釋放操
action = ActionChains(driver)
action.release().perform() # 釋放按下的鼠標(biāo)
二、鍵盤操作
對(duì)于鍵盤的模擬操作,ActionChains類中有提供了按下key_down(keys)、釋放key_up(keys)、按下并釋放send_keys(keys_to_send) 等方法。
鍵盤的操作有普通鍵盤和修飾鍵盤兩種 。
普通鍵盤為常用字母數(shù)字等;修飾鍵盤為Ctrl、Shift、Alt等,修飾鍵盤一般和其他鍵組合使用的鍵。
使用鍵盤操作時(shí)需要引入from selenium.webdriver.common.keys import Keys包,Keys 包中含所有特殊用鍵。
1、普通鍵盤操作
鍵盤操作使用send_keys(*keys_to_send)方法,該方法支持多個(gè)按鍵連續(xù)操作,如果需要對(duì)某個(gè)元素執(zhí)行按鍵操作使用send_keys_to_element( element, *keys_to_send)方法。具體使用如下示例:
from selenium.webdriver.common.keys import Keys
action = ActionChains(driver)
action.send_keys(Keys.SPACE).perform() # 按下并釋放空格鍵
action.send_keys(Keys.TAB).perform() # 按下并釋放Tab鍵
action.send_keys(Keys.BACKSPACE).perform() # 按下并釋放Backspace鍵
action.send_keys(Keys.BACKSPACE,Keys.SPACE).perform() # 連續(xù)執(zhí)行按鍵動(dòng)作
action.send_keys(Keys.TAB).send_keys(Keys.TAB).perform() # 也可以這樣組合
'''
針對(duì)某個(gè)元素發(fā)出某個(gè)鍵盤的按鍵操作,或者是輸入操作
'''
element = driver.find_element_by_id('query')
# 對(duì)一元素使用鍵盤操作
action.send_keys_to_element(element, 'selenium').perform()
# 上面動(dòng)作拆解為下面動(dòng)作
action.click(element).send_keys('selenium').perform()
注意除了 ActionChains類有 send_keys(*keys_to_send)方法外,WebElement 類也有一個(gè) send_keys_to_element(*keys_to_send)方法,這兩個(gè)方法對(duì)于一般的輸入操作基本上相同,不同點(diǎn)在于以下幾點(diǎn):
第一:Actions 中的 send_keys(*keys_to_send)對(duì)修飾鍵操作后并不會(huì)釋放,也就是說當(dāng)調(diào)用 actions.send_keys(Keys.ALT)、 actions.send_keys(Keys.CONTROL)、 action.send_keys(Keys.SHIFT) 的時(shí)候,相當(dāng)于調(diào)用 actions.key_down(keys_to_send),而如果在現(xiàn)實(shí)的應(yīng)用中想要模擬按下并且釋放這些修飾鍵,應(yīng)該先action.reset_actions()重設(shè)action,然后再調(diào)用 action.send_keys(keys.NULL).perform()取消按下的修飾鍵。
第三點(diǎn),在 WebDriver 中,我們可以使用 WebElement 類的 send_keys() 來上傳附件,比如 element.send_keys(“D:\\test\\uploadfile\\test.jpg”)上文件,但不能使用ActionChains來上傳附件,因?yàn)閠ype=’file’的輸入框并不支持鍵盤輸入。
2、修飾鍵的使用
修飾鍵是鍵盤上的一個(gè)或者一組特別的鍵,當(dāng)它與一般按鍵同時(shí)使用時(shí),用來臨時(shí)改變一般鍵盤的普通行為。
修飾鍵一般跟普通鍵組合使用,比如 Ctrl+A、Alt+F4等。
我們電腦中的修飾鍵一般有以下幾種修:Ctrl、Alt(Option)、Shift、AltGr、Windows logo、Command、FN(Function)。一般使用的都是前三種。
對(duì)于修飾鍵的使用在Python selenium中一般使用按下key_down(keys)、釋放key_up(keys)、按下并釋放send_keys(keys_to_send)組合實(shí)現(xiàn)。
action = ActionChains(driver)
action.key_down(Keys.CONTROL).perform() # 按下ctrl鍵
action.key_up(Keys.CONTROL).perform() # 釋放ctrl鍵
action.key_down(Keys.SHIFT).perform() # 按下shift鍵
action.key_up(Keys.SHIFT).perform() # 釋放shift鍵
action.key_down(Keys.ALT).perform() # 按下alt鍵
action.key_up(Keys.ALT).perform() # 釋放alt鍵
示例:通過ctrl+c 來復(fù)制文本
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
三、WebElement.send_keys()鍵盤操作
WebElement元素對(duì)象下的send_keys也支持組合鍵盤操作。
代碼示例如下:
element = driver.find_element_by_id('query')
element.send_keys('selenium')
element.send_keys(Keys.BACK_SPACE) # 按BACKSPACE刪除一個(gè)字符
element.send_keys(Keys.SPACE) # 空格鍵(Space)
element.send_keys(Keys.CONTROL, 'a') # 全選(Ctrl+A)
element.send_keys(Keys.CONTROL, 'c') # 復(fù)制(Ctrl+C)
element.send_keys(Keys.CONTROL, 'v') # 粘貼(Ctrl+v)
element.send_keys(Keys.TAB) # 制表鍵(Tab)
element.send_keys(Keys.ESCAPE) # 回退鍵(Esc)
element.send_keys(Keys.ENTER) # 回車鍵(Enter)
最后感謝每一個(gè)認(rèn)真閱讀我文章的人,看著粉絲一路的上漲和關(guān)注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!
軟件測試面試文檔
我們學(xué)習(xí)必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有字節(jié)大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
?
文章來源:http://www.zghlxwxcb.cn/news/detail-853072.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-853072.html
到了這里,關(guān)于selenium自動(dòng)化測試入門 —— 鍵盤鼠標(biāo)事件ActionChains的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!