本文主要介绍如何在使用selenium进行自动化测试的时候模拟各种鼠标操作。
场景描述
在进行自动化测试的时候,我们可能会需要需要进行鼠标操作的场景,比如:
- 测试右击,查看是否网页是否屏蔽了右键菜单
- 面对滑块式登录验证方式,模拟拖拽
- 模拟前进或后退等鼠标扩展操作
- ……
解决方案
在python
的第三方库selenium
中已经提供了许多现成的鼠标操作方法,包括鼠标能进行的三种操作:点击、释放、移动。以及提供了这三种操作常见的组合操作,我们需要查看我们需要的组合操作是否已经由selenium
提供,对于没有现成方法的操作,需要将我们要进行的鼠标操作分解成这些已经有现成方法的鼠标操作的组合。
在selenium
中模拟鼠标操作需要依靠ActionChains()
方法,这个方法用来模拟各种外部设备(虚拟设备)的操作(比如键盘、鼠标、手写笔、滚轮等等),操作如下:
-
导入AcitionAPI:
from selenium.webdriver.common.action_chains import ActionChains
-
左键单击(点击后释放):
ActionChains(web_driver).click(page_element).perform()
-
右键单击:
ActionChains(web_driver).context_click(page_element).perform()
-
左键双击:
ActionChains(web_driver).double_click(page_element).perform()
-
移动到指定的页面元素上(悬浮):
ActionChains(web_driver).move_to_element(page_element).perform()
-
后退(扩展键):
- 在
selenium 3
的版本中不支持,需要升级到selenium 4
- 版本号通过
print(selenium.__version__)
查看 - 创建组合键生成器:
action = ActionBuilder(web_driver)
- 按下后退键:
action.pointer_action.pointer_down(MouseButton.BACK)
- 释放后退键:
action.pointer_action.pointer_up(MouseButton.BACK)
- 执行组合键:
action.perform()
- 在
-
前进(扩展键):
- 在
selenium 3
的版本中不支持,需要升级到selenium 4
- 创建组合键生成器:
action = ActionBuilder(web_driver)
- 按下前进键:
action.pointer_action.pointer_down(MouseButton.FORWARD)
- 释放前进键:
action.pointer_action.pointer_up(MouseButton.FORWARD)
- 执行组合键:
action.perform()
- 在
-
按下左键后不松开:
ActionChains(web_driver).click_and_hold(page_element).perform()
-
移动指定距离:
ActionChains(web_driver).move_by_offset(横向距离, 竖向距离)
-
将指定元素拖拽到目标区域:
ActionChains(web_driver).drag_and_drop(要拖拽的页面元素,代表目标区域的页面元素).perform()
- 代表目标区域的元素跟要拖拽的页面元素一样通过
find_element
定位
-
拖拽元素移动一定距离:
ActionChains(web_driver).drag_and_drop_by_offset(要拖拽的元素, 横向移动距离, 竖向移动距离).perform()
-
鼠标中键点击:
- 创建组合键生成器:
action = ActionBuilder(web_driver)
- 按下中键:
action.pointer_action.pointer_down(MouseButton.MIDDLE)
- 释放中键:
action.pointer_action.pointer_up(MouseButton.MIDDLE)
- 执行组合键:
action.perform()
- 创建组合键生成器:
具体代码
我们以如下滑块验证为例:
假设滑块的id为slide-1
,则可以用如下代码将滑块按住后往左移动300,使得通过验证:
from selenium.webdriver.common.action_chains import ActionChains
slide = web_driver.find_element_by_id("slide-1") # selenium 3.x.x 的写法
slide = web_driver.find_element("id", "slide-1") # selenium 4.x.x 的写法
ActionChains(web_driver).drag_and_drop_by_offset(slide, 300, 0).perform()
滑动完成后效果如下:
如果要处理的滑块验证在iframe
标签中,记得先定位并切换到iframe元素中,然后再进行操作。快去试试吧~
好书推荐:
- 流畅的python
- Python编程 从入门到实践 第2版
- Python数据结构与算法分析 第2版
好课推荐:文章来源:https://www.toymoban.com/news/detail-403332.html
- 零基础学python
- python核心技术与实战
- python自动化办公实战
写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇文章来源地址https://www.toymoban.com/news/detail-403332.html
到了这里,关于「Python|Selenium|场景案例」如何模拟鼠标单击、双击、右击、长按和拖拽等操作?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!