selenium学习笔记:<8>键盘鼠标事件ActionChains

本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~

说明:本篇博客基于selenium 4.1.0

ActionChains说明

ActionChains都是selenium的一个模块,提供模拟鼠标动作和键盘动作的功能


ActionChains使用方法

# 步骤1:实例化一个ActionChains动作容器
actions = ActionChains(driver, 250)

# 步骤2:往动作容器中依次添加动作
actions.click(ele_click)                              # 调用的动作都会添加到动作容器中
actions.click_and_hold(ele_drag).release(ele_item2)   # 链式添加动作。每个动作返回值为容器对象,因此支持链式连续添加

# 步骤3:执行动作
actions.perform()

ActionChains动作列表

import time
from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.implicitly_wait(5)

# 创建动作容器
actions = ActionChains(driver, 250)


# 等待
n = 3
actions.pause(n)          # 插入在动作中,强制暂停n秒


# 鼠标点击
driver.get('http://sahitest.com/demo/clicks.htm')
ele_click = driver.find_element(By.CSS_SELECTOR, '[value="click me"]')
ele_dclick = driver.find_element(By.CSS_SELECTOR, '[value="dbl click me"]')
ele_rclick = driver.find_element(By.CSS_SELECTOR, '[value="right click me"]')

actions.click(ele_click)              # 单击,ele_click非必传
actions.double_click(ele_dclick)      # 双击,ele_click非必传
actions.context_click(ele_click)      # 右键点击,ele_click非必传


# 鼠标移动
driver.get("https://www.baidu.com/")
ele_set = driver.find_element(By.ID, "s-usersetting-top")

actions.move_to_element(ele_set)                           # 移动鼠标到元素
x, y = 30, 60
actions.move_by_offset(x, y).context_click()               # 以浏览器左上角为原点,鼠标向下向右移动(x,y)距离
actions.move_to_element_with_offset(ele_set, x, y)         # 以元素左上角为原点,鼠标向下向右移动(x,y)距离

# 鼠标拖动
driver.get("http://sahitest.com/demo/dragDropMooTools.htm")
ele_drag = driver.find_element(By.ID, "dragger")
ele_item1 = driver.find_element(By.XPATH, "//div[text()='Item 1']")
ele_item2 = driver.find_element(By.XPATH, "//div[text()='Item 2']")
ele_item3 = driver.find_element(By.XPATH, "//div[text()='Item 3']")

actions.drag_and_drop(ele_drag, ele_item1)                                # 拖动元素ele_drag到ele_item1
actions.click_and_hold(ele_drag).release(ele_item2)                       # 点住元素ele_drag,在ele_item1处释放鼠标
actions.click_and_hold(ele_drag).move_to_element(ele_item3).release()     # 点住元素ele_drag,移动鼠标到ele_item1处,释放鼠标
x, y = 30, 60
actions.drag_and_drop_by_offset(ele_drag, x, y)                           # 拖动元素ele_drag到坐标(x,y)

# 键盘按键
driver.get("https://www.baidu.com/")
ele_input = driver.find_element(By.ID, "kw")

actions.send_keys("baidu", Keys.SPACE, '啦啦啦')     # 连续输入
actions.key_down('a').key_up('a')                   # 键盘按下a,键盘释放a
actions.send_keys_to_element(ele_input, 'aaa')      # 在元素处输入,可支持连续输入


# 容器相关
actions.reset_actions()   # 清空动作容器
actions.perform()         # 按顺序开始执行动作


time.sleep(5)
driver.quit()

更多文章推荐:
只需Docker,环境问题再也不是测开路上的『坑』_霍格沃兹测试开发学社的博客-CSDN博客