本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
说明:本篇博客基于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()