日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python Selenium:键盘鼠标操作

發(fā)布時間:2023/12/9 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python Selenium:键盘鼠标操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在自動化測試中,一定會遇到需要使用鼠標和鍵盤去操作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ū)別。

#鏈式操作 search_input = driver.find_element_by_id('kw') search_button = driver.find_element_by_id('su') ActionChains(driver).send_keys_to_element(search_input, 'baidu').click(search_button).perform()#分步操作 search_input = driver.find_element_by_id('kw') search_button = driver.find_element_by_id('su') action = ActionChains(driver) action.send_keys_to_element(search_input, 'baidu') action.click(search_button) action.perform()

實例

我們用下面的網(wǎng)址來操作實踐一下。網(wǎng)站中包含了一行字,一個紅色矩形框,我們使用ActionChains類的API實現(xiàn)拖動紅色的矩形框。
http://www.theautomatedtester.co.uk/demo2.html

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from time import sleepdriver = webdriver.Chrome() driver.get('http://www.theautomatedtester.co.uk/demo2.html')dragger1 = driver.find_element_by_class_name('draggable') #定位要拖動的矩形框 drag_to = driver.find_element_by_class_name('undropped') #定位拖動到的位置 action = ActionChains(driver) action.drag_and_drop(dragger1, drag_to).perform() #拖動矩形框到目標元素處 sleep(2)driver.quit()

我們還可以用其他方式實現(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))

# coding = utf-8 from selenium import webdriver import os from time import sleepdriver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://the-internet.herokuapp.com/drag_and_drop')with open(os.path.abspath('drag_and_drop_helper.js'), 'r') as js_file:line = js_file.readline()script = ''while line:script += line line = js_file.readline()driver.execute_script(script + "$('#column-a').simulateDragDrop({ dropTarget: '#column-b'});") sleep(2) driver.quit()

歡迎訂閱我的公眾號:進擊的小QA,第一時間收到文章推送哦

總結(jié)

以上是生活随笔為你收集整理的Python Selenium:键盘鼠标操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。