「Python|Selenium|场景案例」如何模拟鼠标单击、双击、右击、长按和拖拽等操作?

本文主要介绍如何在使用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元素中,然后再进行操作。快去试试吧~

好书推荐:

好课推荐:

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
WinAPI-Wrapper 模拟鼠标点击 用于模拟鼠标移动、点击、窗口操作等的Windows API包装器类。 API 下面是一些可用的方法的总结。有更多的方法和类,比下面列出的要多,但目的是要大致了解包装器能做什么。要查看关于特定方法的详细信息和参数的详细信息,请查看代码本身,因为它的注释很好。 Mouse.cs public static void LeftClick(); public static void RightClick(); public static void MiddleClick(); public static void LeftDown(); public static void LeftUp(); public static void RightDown(); public static void RightUp(); public static void MiddleDown(); public static void MiddleUp(); public static void Move(int x, int y); public static void LeftDrag(Point point1, Point point2, int interval, int lag); Window.cs public static bool DoesExist(string windowTitle); public static IntPtr Get(string windowTitle); public static IntPtr GetFocused(); public static void SetFocused(IntPtr hWnd); public static bool IsFocused(IntPtr hWnd); public static void Move(IntPtr hWnd, int x, int y); public static void Resize(IntPtr hWnd, int width, int height); public static void Hide(IntPtr hWnd); public static void Show(IntPtr hWnd); public static Rectangle GetDimensions(IntPtr hWnd); public static Size GetSize(IntPtr hWnd); public static Point GetLocation(IntPtr hWnd); public static string GetTitle(IntPtr hWnd); public static void SetTitle(IntPtr hWnd, string title); public static void Maximize(IntPtr hWnd); public static void Minimize(IntPtr hWnd); public static void Normalize(IntPtr hWnd); public static Bitmap Screenshot(IntPtr hWnd); public static void RemoveMenu(IntPtr hWnd); public static void Close(IntPtr hWnd); public static void DisableCloseButton(IntPtr hWnd); public static void DisableMaximizeButton(IntPtr hWnd); public static void DisableMinimizeButton(IntPtr hWnd); public static void EnableMouseTransparency(IntPtr hWnd); public static Point ConvertToWindowCoordinates(IntPtr hWnd, int x, int y); public static Point GetCoordinateRelativeToWindow(IntPtr hWnd); Desktop.cs public static Bitmap Screenshot(); public static void HideTaskBar(); public static void ShowTaskBar(); public static int GetWidth(); public static int GetHeight(); 使用 在windows api文件夹中编译代码会产生一个.dll文件。任何引用这个.dll的ccode都可以使用包装器。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明仔的阳光午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值