Python Selenium:键盘鼠标操作
在自動化測試中,一定會遇到需要使用鼠標(biāo)和鍵盤去操作Web元素,比如單擊、雙擊、輸入文本等等。在之前的介紹中,我們也使用過.click()、.send_keys()、.clear()這三種基本的操作,今天我們來介紹其他的操作API。
簡介
| click(on_element=None) | 鼠標(biāo)左鍵單擊 |
| click_and_hold(on_element=None) | 鼠標(biāo)左鍵單擊,但不松開 |
| context_click(on_element=None) | 鼠標(biāo)右鍵單擊 |
| double_click(on_element=None) | 鼠標(biāo)左鍵雙擊 |
| drag_and_drop(source, target) | 鼠標(biāo)左鍵單擊不松開,移動到指定元素后松開(即拖拽 ) |
| drag_and_drop_by_offset(source, xoffset, yoffset) | 鼠標(biāo)左鍵單擊不松開,移動到指定坐標(biāo)后松開 |
| key_down(value, element=None) | 按下鍵盤某個(gè)鍵 |
| key_up(value, element=None) | 松開鍵盤某個(gè)鍵 |
| move_by_offset(xoffset, yoffset) | 鼠標(biāo)移動到某個(gè)坐標(biāo) |
| move_to_element(to_element) | 鼠標(biāo)移動到某個(gè)元素 |
| move_to_element_with_offset(to_element, xoffset, yoffset) | 鼠標(biāo)移動到距離某個(gè)元素的某個(gè)距離 |
| pause(seconds) | 暫停輸入 |
| release(on_element=None) | 在某個(gè)元素松開鼠標(biāo)左鍵 |
| send_keys(*keys_to_send) | 在當(dāng)前元素中輸入值 |
| send_keys_to_element(element, *keys_to_send) | 給某個(gè)元素輸入值 |
| perform() | 相應(yīng)存儲的動作 |
| reset_actions() | 清除所有已存儲的動作 |
因?yàn)槲覀冎笆褂眠^.click()、.send_keys()等方法,當(dāng)我們用同樣方法去使用上面其他的API時(shí),我們發(fā)現(xiàn)彈出了error message
AttributeError: 'WebElement' object has no attribute 'key_down'這是為什么呢?
ActionChains介紹
上面表格中的API都屬于Selenium的一組類,這個(gè)類叫做ActionChains類。簡單來說,這個(gè)類中包含的API是使用鏈?zhǔn)椒椒▉韺?shí)現(xiàn)的,所有相應(yīng)的動作,都存在ActionChains的一個(gè)隊(duì)列當(dāng)中,當(dāng)使用perform()后,存儲在隊(duì)列中的相應(yīng)動作,會按照存儲順序被觸發(fā),現(xiàn)在就可以理解了是吧。
使用ActionChains類,有兩種方法,一種是鏈?zhǔn)讲僮?#xff0c;一種是分步操作,但他們的本質(zhì)都是一樣的,結(jié)果也不會有區(qū)別。
實(shí)例
我們用下面的網(wǎng)址來操作實(shí)踐一下。網(wǎng)站中包含了一行字,一個(gè)紅色矩形框,我們使用ActionChains類的API實(shí)現(xiàn)拖動紅色的矩形框。
http://www.theautomatedtester.co.uk/demo2.html
我們還可以用其他方式實(shí)現(xiàn),使用下面的代碼替代。該代碼首先讓鼠標(biāo)移動到紅色矩形框,然后按住不松開,再讓鼠標(biāo)移動到拖拽的目標(biāo)元素,最后松開鼠標(biāo)。
#action.drag_and_drop(dragger1, to).perform() 使用下面代碼代替此行,實(shí)現(xiàn)同一效果 action.move_to_element(dragger1).click_and_hold().move_to_element(drag_to).release().perform()補(bǔ)充
對于HTML5的拖拽等動作,Selenium支持得并不是很好,不同的JS寫成的網(wǎng)站,可能使用drag_to_drop()等API方法不能夠成功實(shí)現(xiàn),請參考:
依據(jù)lxlyes的CSDN博客的介紹,我們使用JS代碼來實(shí)現(xiàn)拖拽(需要drap_and_drop_helper.js下載到腳本相同文件夾內(nèi))
歡迎訂閱我的公眾號:進(jìn)擊的小QA,第一時(shí)間收到文章推送哦
總結(jié)
以上是生活随笔為你收集整理的Python Selenium:键盘鼠标操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dev-c++开发的全鼠标操作控制台战棋
- 下一篇: Teams Bot开发系列:Teams的