一、简介
-
用于向Web浏览器提供虚拟化设备输入操作的接口。
-
除了高级元素交互之外,Action接口还提供了,对指定输入设备可以执行的确切操作的精细控制。
-
Selenium为2种输入源提供了接口:键盘设备的输入,鼠标、笔或触摸设备的输入,以及滚动设备的滚轮输入(在Selenium4.2中引入)。
-
Selenium允许构建分配给特定输入的独立操作命令,会将他们连接在一起,并调用关联的执行方法一次执行它们。
二、使用场景
使用场景 | 对应事件 |
---|---|
复制粘贴 | 键盘事件 |
拖动元素到某个位置 | 鼠标事件 |
鼠标悬停 | 鼠标事件 |
滚动到某个元素 | 滚动事件 |
使用触控笔点击 | 触控笔事件(了解即可) |
三、ActionChains解析
3.1 语法讲解
- Python引入依赖
# 引入依赖
from selenium.webdriver import ActionChains
- ActionChains是Selenium Python库中的一个类,用于执行一系列复杂的鼠标和键盘操作,例如鼠标移动,鼠标点击事件,键盘输入。这个类允许将多个操作连接在一起,以便执行多个步骤的操作序列。
ActionChains(driver).some_action().perform()
- driver:是一个Selenium WebDriver对象。
- some_action():是指一系列操作,如鼠标操作、键盘操作或其他页面交互的操作等。
- perform():是Selenium中ActionChains类的一个方法,用于执行先前构建的一系列操作,如鼠标或键盘操作。
通常,需要创建一个ActionChains对象,然后使用它来定义一系列鼠标或键盘操作,最后使用perform方法来执行这些操作。
3.2 暂停
-
指针移动和滚轮滚动允许用户设置操作的持续时间,但有时只需要在操作之间等待一下,即可正常工作。
-
实现方式:pause(1)表示暂停一秒。
3.3 释放所有ActionChains
-
需要重点注意的一点是,驱动程序会记住整个会话中所有输入项的状态。即使创建actions类的新实例,按下的键和指针的位置,也将处于以前执行的操作离开他们的任何状态。
-
有一种特殊的方法来释放所有当前按下的键和指针按钮。此方法在每种语言的实现方式不同,因为它不会使用perform方法执行。
-
Python语法:
ActionBuilder(driver).clear_actions()
四、键盘操作
- 只有两个操作可以使用键盘完成:按下某个键,以及释放(松开)一个按下的键,除了支持ASCII字符外,每个键盘按键还具有可以按特定顺序按下或释放的表现形式。
4.1 按键
-
除了由常规Unicode表示的按键,其他键盘按键被分配了一些Unicode值,以用于操作Selenium。
-
每种语言都有自己的方式来使用这些按键,以下是完整列表:
4.2 输入字符
ActionChains(driver).send_keys(keys_to_send).perform()
-
send_keys()是Selenium中ActionChains类的一个方法,用于模拟在浏览器中输入字符。这个方法通常用于填写表单字段或模拟键盘输入。
-
Python语法:
ActionChains(driver)\
.send_keys("123sfg")\
.perform()
4.3 指定元素输入字符
ActionChains(driver).send_keys_to_element(element,keys_to_send).perform()
-
element:是要输入文本的目标元素,通常是通过find_element()或其他方法获取的。
-
send_keys_to_element():是Selenium中ActionChains类的一个方法,用于模拟在特定元素中输入文本。
-
Python语法:
text_input = driver.find_element(By.ID,"textInput")
ActionChains(driver)\
.send_keys_to_element(text_input,"abc")\
.perform()
4.4 按下按键
ActionChains(driver).key_down(value,element).perform()
-
value:是要按下的键盘按键的键码或键名。例如,Keys.SHIFT表示按下Shift键。
-
element:是要执行按键操作的WebElement对象。
-
key_down():是Selenium中ActionChains类的一个方法,用于模拟按下键盘上的按键。
-
Python语法:
ActionChains(driver)\
.key_down(Keys.SHIFT)\
.send_keys()\
.perform()
4.5 释放按键
ActionChains(driver).key_up(value,element).perform()
-
key_up()是Selenium中ActionChains类的一个方法,用于模拟释放(松开)键盘上的按键。
-
Python语法:
ActionChains(driver)\
.key_down(Keys.SHIFT)\
.send_keys("a")\
.key_up(Keys.SHIFT)\
.send_keys("b")\
.perform()
4.6 复制粘贴
-
下面是使用上述所有方法执行复制/粘贴的操作。需要注意的一点是,用于次操作的键位会有所不同,具体取决于是Windows还是Mac OS。
-
Python语法:
cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL
ActionChains(driver)\
.send_keys("selenium")\
.send_keys(Keys.ARROW_LEFT)\
.key_down(Keys.SHIFT)\
.send_keys(Keys.ARROW_UP)\
.key_up(keys.SHIFT)\
.key_down(cmd_ctrl)\
.send_keys("xvv")\
.key_up(cmd_ctrl)\
.perform()
五、鼠标操作
- 只有3个操作可以使用鼠标完成:按下按钮、松开按下的按钮,然后移动鼠标。
5.1 单击并按住
ActionChains(driver).click_and_hold().perform()
-
click_and_hold()是Selenium中ActionChains类的一个方法,用于模拟鼠标点击并按住的操作,这个操作通常用于模拟拖拽操作或其他需要按住鼠标按钮的交互。
-
Python语法:
clickable = driver.find_element(By.ID,"clickable")
ActionChains(driver)\
.click_and_hold(clickable)\
.perform()
5.2 单击并释放
ActionChains(driver).click(WebElement).perform()
-
click()是Selenium元素中ActionChains类的一个方法,用于模拟鼠标单击的操作。例如单击按钮、链接或其他交互元素。
-
Python语法:
clickable = driver.find_element(By.ID,"click")
ActionChains(driver)\
.click(clickable)\
.perform()
5.3 备用按钮点击
- 鼠标功定义了5个按钮:
- 0——左按钮(默认值)
- 1——中间按钮(当前不支持)
- 2——右键
- 3——X1(后退)按钮
- 4——X2(前进)按钮
5.4 右键单击并释放
ActionChains(driver).context_click(WebElement).perform()
-
context_click()是Selenium中ActionChains类的一个方法,用于模拟鼠标右键单击的操作,触发上下文菜单,或执行与右键单击相关的其他操作。
-
Python语法:
clickable = driver.find_element(By.ID,"click")
ActionChains(driver)\
.context_click(clickable)\
.perform()
5.5 后退点击
-
没有方便的方法,只需要按下并释放鼠标按钮3。
-
Python语法:
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
5.6 前进点击
-
没有方便的方法,只需要按下并释放鼠标按钮4。
-
Python语法:
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
5.7 双击
ActionChains(driver).double_click(WebElement).perform()
-
context_click()是Selenium中ActionChains类的一个方法,用于模拟在指定的WebElement上执行双击操作。
-
Python语法:
clickable = driver.find_element(By.ID,"clickable")
ActionChains(driver)\
.double_click(clickable)\
.perform()
5.8 移动到元素(悬浮操作)
ActionChains(driver).move_to_element(WebElement).perform()
-
move_to_element()是Selenium中ActionChains类的一个方法,用户模拟将鼠标光标移动到指定WebElement元素上。通常用于触发浮动菜单、工具提示,或执行与鼠标悬停相关的操作。
-
Python语法:
hoverable = driver.find_element(By.ID,"hover")
ActionChains(driver)\
.move_to_element(hoverable)\
.perform()
5.9 拖放元素1到元素2上
ActionChains(driver).drag_and_drop(source,target).perform()
-
source:代表源元素(要拖动的元素)。
-
target:打标目标元素(要将源元素拖动到的位置)。
-
drag_and_drop()是Selenium中ActionChains类的一个方法,用于模拟拖拽操作,此方法对源元素执行单击并按住,移动到目标元素的位置,然后释放鼠标。特别是在需要进行拖拽操作的自动化测试中非常有用。
-
Python语法:
dragable = driver.find_element(By.ID,"dragable")
dropable = driver.find_element(By.ID,"dropable")
ActionChains(driver)\
.drag_and_drop(dragable,dropable)\
.perform()
六、滚动操作
6.1 滚轮/滚动操作-滚动到元素
ActionChains(driver).scroll_to_element(element).perform()
-
element:一个WebElement对象,代表要滚动到的页面元素。
-
scroll_to_element是Selenium中ActionChains类中的方法,用于执行页面滚动操作,将页面滚动到指定的元素(WebElement)可见位置。这个方法用于确保可以与页面上的特定元素进行交互,尤其是当页面很长或者需要滚动才能访问元素时。
-
Python语法:
iframe = driver.find_element(By.TAG_NAME,"iframe")
ActionChains(driver)\
.scroll_to_element(iframe)\
.perform()
6.2 滚轮/滚动操作-根据坐标滚动
ActionChains(driver).scroll_by_amount(delta_x:int,delta_y:int).perform()
-
delta_x:使用滚轮在X轴上滚动的距离。负值表示向左滚动。
-
delta_y:使用滚轮在Y轴上滚动的距离。负值表示向上滚动。
-
scroll_by_amount():是Selenium中ActionChains类中的方法,用于按照指定的距离流动页面。将页面滚动指定的距离,以将页面上的内容或元素带入视野。
-
Python语法:
footer = driver.find_element(By.TAG_NAME,"footer")
delta_y = footer.rect['y']
ActionChains(driver)\
.scroll_by_amount(0,delta_y)\
.perform()