1、了解元素交互的常用方法
2、学习如何对多选元素进行操作
3、学习模拟鼠标进行相关操作(本节目标)
4、学习模拟键盘进行相关操作(本节目标)
用于向 Web 浏览器提供虚拟化设备输入操作的低级接口.除了刚刚讲过的Web元素交互之外, Actions 接口 还提供了对指定输入设备 可以执行的确切操作的精细控制. Selenium为3种输入源提供了接口: 键盘设备的键输入, 鼠标, 笔或触摸设备的输入, 以及滚轮设备的滚轮输入 (在Selenium 4.2中引入). Selenium允许您构建分配给特定输入的独立操作命令, 会将他们链接在一起, 并调用关联的执行方法以一次执行它们。
在从遗留JSON Wire协议迁移到 新的W3C WebDriver协议的过程中, 低级的操作构建块变得特别详细. 它非常强大, 但每个输入设备都有多种使用方法, 如果您需要管理多个设备, 则负责确保他们之间的同步正确.值得庆幸的是, 不需要学习如何直接使用低级命令, 因为要执行的几乎所有操作, 都已提供了相应的简便方法, 这些方法可以组合较低级别的命令. 请分别参阅下面相应的键盘, 鼠标, 笔 和滚轮 小节.
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver).move_to_element(clickable).pause(1).click_and_hold().pause(1).send_keys("abc").perform()
需要注意的重要一点是, 驱动程序会记住整个会话中所有输入项的状态. 即使创建actions类的新实例, 按下的键和指针的位置 也将处于以前执行的操作离开它们的任何状态.有一种特殊的方法来释放所有当前按下的键和指针按钮. 此方法在每种语言中的实现方式不同, 因为它不会使用perform方法执行.
ActionBuilder(driver).clear_actions()
用于与网页交互的任何指针设备的表示形式。
只有3个动作可以用鼠标完成:按下一个按钮,释放一个被按下的按钮,移动鼠标。Selenium提供了最常见的方式组合这些操作的方便方法。
此方法结合了将鼠标移动到元素中心与按下鼠标左键。这对于聚焦特定元素很有用
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver).click_and_hold(clickable).perform()
clickable = driver.find_element(By.ID, "click")
ActionChains(driver).click(clickable).perform()
一个鼠标共有5个定义按钮:
0 — Left Button (the default) 左键(默认)
1 — Middle Button (currently unsupported) 中键(目前不支持)
2 — Right Button 右键
3 — X1 (Back) Button (后退)按钮
4 — X2 (Forward) Button (前进)按钮
Context Click (单击右键)
这种方法结合了移动到元素中心与按下并释放鼠标右键(按钮2)
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver).context_click(clickable).perform()
Double click (双击)
此方法将移动到元素中心与两次按下并释放鼠标左键结合在一起
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver).double_click(clickable).perform()
Move to element (移动到元素)
此方法将鼠标移动到元素的视图内中心点。这也被称为“悬停”。注意元素必须在视窗中,否则命令会出错。
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver).move_to_element(hoverable).perform()
用于与网页交互的任何关键输入设备的表示。只有两个操作可以用键盘完成:按下一个键和释放一个按下的键。除了支持ASCII字符之外,每个键盘键都有一个表示,可以按下或释放指定的序列。
from selenium.webdriver.common.keys import Keys
ActionChains(driver).key_down(Keys.SHIFT).send_keys("abc").perform()
ActionChains(driver).key_down(Keys.SHIFT).send_keys("a").key_up(Keys.SHIFT).send_keys("b").perform()
这是Actions API中的一个方便的方法,它将keyDown和keyUp命令组合在一个操作中。执行此命令与使用元素方法略有不同,但主要用于需要在其他操作中间输入多个字符的情况。
活性元素,也就是当前所在的元素,比如例子中的输入框
ActionChains(driver).send_keys("abc").perform()
text_input = driver.find_element(By.ID, "textInput")ActionChains(driver).send_keys_to_element(text_input, "abc").perform()
下面是一个使用上述所有方法来执行复制/粘贴操作的示例。注意,此操作使用的键将根据是否是Mac OS而有所不同。
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()
关于键盘以及鼠标的操作,除了以上的常用方式的解决方案,还有其它很多不常用的操作,例如游戏鼠标中的按键,它们的解决方案是怎样的?这些都要大家在实际的工作中进行探索,此处不再进行介绍。
下一篇文章,我们将一起学习窗口的切换以及iframe的处理,再见!
感谢你们的阅读!
光阴者百代之过客,唯有努力奔跑方能生风