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