本文主要介绍如何在使用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版
好课推荐:
- 零基础学python
- python核心技术与实战
- python自动化办公实战
写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇
版权归原作者 明仔的阳光午后 所有, 如有侵权,请联系我们删除。