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() | 相應存儲的動作 |
| reset_actions() | 清除所有已存儲的動作 |
因為我們之前使用過.click()、.send_keys()等方法,當我們用同樣方法去使用上面其他的API時,我們發現彈出了error message
AttributeError: 'WebElement' object has no attribute 'key_down'這是為什么呢?
ActionChains介紹
上面表格中的API都屬于Selenium的一組類,這個類叫做ActionChains類。簡單來說,這個類中包含的API是使用鏈式方法來實現的,所有相應的動作,都存在ActionChains的一個隊列當中,當使用perform()后,存儲在隊列中的相應動作,會按照存儲順序被觸發,現在就可以理解了是吧。
使用ActionChains類,有兩種方法,一種是鏈式操作,一種是分步操作,但他們的本質都是一樣的,結果也不會有區別。
實例
我們用下面的網址來操作實踐一下。網站中包含了一行字,一個紅色矩形框,我們使用ActionChains類的API實現拖動紅色的矩形框。
http://www.theautomatedtester.co.uk/demo2.html
我們還可以用其他方式實現,使用下面的代碼替代。該代碼首先讓鼠標移動到紅色矩形框,然后按住不松開,再讓鼠標移動到拖拽的目標元素,最后松開鼠標。
#action.drag_and_drop(dragger1, to).perform() 使用下面代碼代替此行,實現同一效果 action.move_to_element(dragger1).click_and_hold().move_to_element(drag_to).release().perform()補充
對于HTML5的拖拽等動作,Selenium支持得并不是很好,不同的JS寫成的網站,可能使用drag_to_drop()等API方法不能夠成功實現,請參考:
依據lxlyes的CSDN博客的介紹,我們使用JS代碼來實現拖拽(需要drap_and_drop_helper.js下載到腳本相同文件夾內)
歡迎訂閱我的公眾號:進擊的小QA,第一時間收到文章推送哦
總結
以上是生活随笔為你收集整理的Python Selenium:键盘鼠标操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dev-c++开发的全鼠标操作控制台战棋
- 下一篇: 用Python绘制了若干张词云图,惊艳了