0


web ui自动化之模拟鼠标操作 - ActionChains

文章目录


前言

1、本文使用Python语言,以淘宝网为例
2、本文将介绍selenium–webdriver库中的ActionChains类,该类提供了模拟鼠标的常用方法,包括单击、双击、悬停、拖动等常用功能
3、前置步骤,需要先安装selenium并导入ActionChains类

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common import keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()# 使用chrome驱动
driver.maximize_window()# 将窗口最大化
driver.get('https://www.taobao.com/')# 访问被测域名

ActionChains类方法介绍

1.执行所有存储的操作 - perform()

方法
perform(self)

预学习perform()方法,首先要先了解一下ActionChains的执行原理:
当你调用ActionChains中的其他方法时(如:chick(),send_keys()等),是不会立即执行的,而是会将所有的操作按顺序存放在一个队列里,只有当你调用perform()方法时,队列中的时间会依次执行。
所以,在任意的操作链结束之后都要调用 perform()方法

代码如下(示例):

element = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).click(element).perform()# 点击“新款连衣裙”
ActionChains(driver).send_keys('mac').perform()# 输入“mac”
ActionChains(driver).pause(3).perform()# 暂停3秒

2.鼠标单击 - click()

方法
click(self, on_element=None)

on_element=None:鼠标单击的元素,如果没有则单机鼠标当前位置

代码如下(示例):

# 链式写法
driver.find_element(By.LINK_TEXT,'新款连衣裙').click()# 分步式写法
click= driver.find_element(By.LINK_TEXT,'新款连衣裙')# 定位到元素,并赋值给left
action = ActionChains(driver)
action.click(click)# 操作点击的时候传入元素值
action.perform()

3.点击鼠标左键,不松开 - click_and_hold()

方法
click_and_hold(self, on_element=None)

on_element=None:鼠标左击的元素,如果没有则单机鼠标当前位置

代码如下(示例):

left = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).click_and_hold(left).perform()

4.在某个元素位置松开鼠标左键 - release()

方法
release(self, on_element=None)

on_element=None:鼠标按下的元素,如果没有则在当前鼠标位置释放

代码如下(示例):

# 链式写法
left = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).click_and_hold(left).release(left).perform()# 分步式写法
left = driver.find_element(By.LINK_TEXT,'新款连衣裙')
action = ActionChains(driver)
action.click_and_hold(left)# 在left元素上点击鼠标左键不松开
action.release(left)# 在left元素上松开鼠标左键
action.perform()# 执行队列中的时间

5.点击鼠标右键 - context_click()

方法
context_click(self, on_element=None)
on_element=None:鼠标右击的元素,如果没有则右击鼠标当前位置

代码如下(示例):

right = driver.find_element(By.CSS_SELECTOR,'[id="q"]')
ActionChains(driver).context_click(right).perform()

6.双击鼠标左键 - double_click()

方法
double_click(self, on_element=None)

on_element=None:要双击的元素,如果没有则双击鼠标当前位置

代码如下(示例):

double = driver.find_element(By.LINK_TEXT,'新款连衣裙')
ActionChains(driver).double_click(double).perform()

7.按住鼠标左键将元素拖拽到某个元素然后松开 - drag_and_drop

方法
drag_and_drop(self, source, target)

source:鼠标按下的元素
target:拖拽元素的终点

代码如下(示例):

element = driver.find_element(By.LINK_TEXT,'四件套')
search = driver.find_element(By.CSS_SELECTOR,'#q')
ActionChains(driver).drag_and_drop(element,search).perform()

8.拖拽到某个坐标然后松开 - drag_and_drop_by_offset()

方法
drag_and_drop_by_offset(self, source, xoffset, yoffset)

source:鼠标按下的元素
xoffset:要移动到的x坐标
yoffset:要移动到的y坐标

代码如下(示例):

element = driver.find_element(By.LINK_TEXT,'四件套')
search = driver.find_element(By.CSS_SELECTOR,'#q')print(search.location)# 打印元素坐标
ActionChains(driver).drag_and_drop_by_offset(element,487,174).perform()

9.发送按键不释放(按下某个键盘上的键)- key_down()

方法
key_down(self, value, element=None) # 该方法只可和Control、Alt和Shift一起使用

value:要发送的修改器键(参考keys类)
element:要发送秘钥的元素,如果没有传则像当前聚焦的元素发送一个键
代码如下(示例):

# 使用键盘输入mac后,在按键ctrl+a操作全选,然后释放ctrl键,然后按回车键# 下键盘操作键,需要调用Keys类,如Keys.CONTROL-代表ctrl键,操作键也可以写成uncode编码形式,如'\ue007'-代表enter键

ActionChains(driver).send_keys('mac').key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys('\ue007').perform()

10.释放修改器(松开键盘上的某个键) - key_up()

方法
key_up(self, value, element=None)

value:要发送的修改器键(参考keys类)
element:要发送秘钥的元素,如果没有传则像当前聚焦的元素发送一个键

代码如下(示例):

ActionChains(driver).send_keys('mac').key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys('\ue007').perform()

11.发送某个键到当前焦点的元素 - send_keys()

方法
send_keys(self, *keys_to_send)

*keys_to_send:要发送的内容/按键

代码如下(示例):

ActionChains(driver).send_keys('mac').perform()

12.发送某个键到指定元素 - send_keys_to_element()

方法
send_keys_to_element(self, element, *keys_to_send)

element:要发送内容的的元素
*keys_to_send:要发送的内容/按键

代码如下(示例):

elem = driver.find_element(By.XPATH,'//*[@id="q"]')
ActionChains(driver).send_keys_to_element(elem,'ipad').perform()

13.鼠标移动到某个元素(悬停) - move_to_element()

方法
move_to_element(self, to_element)

to_element:要移动到的元素(中间位置)
代码如下(示例):

element = driver.find_element(By.LINK_TEXT,'四件套')
ActionChains(driver).move_to_element(element).perform()# 写法2# 找到需要悬停的页面元素
link1 = self.driver.find_element(By.XPATH,'xx.png"]')# 找到第二个需要悬停的页面元素
link2 = self.driver.find_element(By.XPATH,'//span[text()="小白"]')# 模拟鼠标悬停操作
ActionChains(self.driver).move_to_element(link1).perform()
time.sleep(3)# 在悬浮框中点击元素
ActionChains(self.driver).click(link2).perform()
time.sleep(3)

14.将鼠标移动到与当前鼠标位置的偏移位置 - move_by_offset()

方法
move_by_offset(self, xoffset, yoffset)

xoffset:要移动到的X偏移量,以正整数或负整数的形式
yoffset:要移动到的Y偏移量,为正整数或负整数

代码如下(示例):

15.移动到距某个元素(左上角坐标)多少距离的位置 - move_to_element_with_offset()

方法
move_to_element_with_offset(self, to_element, xoffset, yoffset)

to_element:要移动到的元素
xoffset:要移动到的X偏移
yoffset:要移动到的Y偏移

代码如下(示例):

16.将滚轮滚动信息发送到浏览器进行处理 - scroll()

方法
scroll(self, x: int, y: int, delta_x: int, delta_y: int, duration: int = 0, origin: str = “viewport”)

x:起始x坐标
y:起始y坐标
delta_x:鼠标在x轴上滚动的距离
delta_y:鼠标在y轴上滚动的距离

代码如下(示例):

# 这里可以使用chrome的插件page ruler来获取坐标位置
ActionChains(driver).scroll(1518,43,0,1000,300).perform()

17.在指定的持续时间(秒)内暂停所有输入 - pause()

方法
pause(self, seconds)

seconds:暂停输入的时间

代码如下(示例):

# 输入mac后,等待3秒,然后输入ipad
ActionChains(driver).send_keys('mac').pause(3).send_keys_to_element(elem,'ipad').perform()

18.清除已存储在本地和远程端的操作 - reset_actions()

方法
reset_actions(self)

代码如下(示例):

ActionChains(driver).send_keys('iphone').perform().reset_actions()

本文转载自: https://blog.csdn.net/jkbxql/article/details/125331488
版权归原作者 XiYang- 所有, 如有侵权,请联系我们删除。

“web ui自动化之模拟鼠标操作 - ActionChains”的评论:

还没有评论