当前位置: 首页 > article >正文

「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 ActionChainsslide = 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自动化办公实战

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/392215.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章:

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

本文主要介绍如何在使用selenium进行自动化测试的时候模拟各种鼠标操作。 文章目录场景描述解决方案具体代码场景描述 在进行自动化测试的时候,我们可能会需要需要进行鼠标操作的场景,比如: 测试右击,查看是否网页是否屏蔽了右键…...

【深度学习基础2】生物神经元与感知机

一、生物神经元 让我们借助一个卡通的例子来阐述神经元是如何工作的。我们的感官与外部世界进行交互,感官将信号传递给神经元,神经元被激活,产生一个响应(例如,例子中的『哈哈大笑』) 在现实中,并非是一个神经元来完成这件事情,而是由大量神经元并行相连而构成的一个网…...

二叉树剑指27

二叉树镜像 方法一:使用辅助栈形式 第一步:判断根节点是否为null 是返回null,否则创建栈并加入根节点 第二步:遍历条件栈不为null情况下,依次判断左右子节点是否为null,如果不为null则加入栈中&#xff0…...

【教程】微服务使用http客户端Feign

【教程】http客户端Feign RestTemplate 方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码 String url = "http://userservice/user/" + order.getUserId(); User user = restTemplate.getForObject(url,User.class...

Python3 正则表达式

在 Python3 中正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模…...

分享114个JS特效动画效果,总有一款适合您

分享114个JS特效动画效果,总有一款适合您 114个JS特效动画效果下载链接:https://pan.baidu.com/s/18_NR3eaxDddWSHqAbMYiuw?pwdm25p 提取码:m25p Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery动画…...

Canadian Coding Competition(CCC) 2020 Senior 题解

Problem S1: Surmising a Sprinter’s Speed Problem S1: 推测短跑运动员的速度 Problem Description Trick E. Dingo is trying, as usual, to catch his nemesis the Street Sprinter. His past attempts using magnets, traps and explosives have failed miserably, s…...

40 计算机组成原理12h-北大陆俊林老师

P11 - 1 - 101-电子计算机的兴起(16-50--)16:51P21 - 2 - 102-冯诺依曼结构的要点(13-59--)14:00P31 - 3 - 103-冯诺依曼结构的小故事(9-22--)09:23P41 - 4 - 104-计算机结构的简化模型(10-28--…...

【Note4】rsyslog,logrotate,journalctl

文章目录1.rsyslog:rsyslogd一个进程 ,管理每个进程发来的log并往/var/log里写,syslog函数将log写给rsyslogd进程,rsyslogd -v2.logrotate:logrotate /etc/logrotate.rsyslog(bb中重命名)2.2 rs…...

Nginx内存池源码剖析

能看出来Nginx小块内存和大块内存分界线就是一个页面4k(x86) #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1)//能分配的最大内存#define NGX_DEFAULT_POOL_SIZE (16 * 1024)//默认池的大小 16k#define NGX_POOL_ALIGNMENT 16//字节对齐…...

介绍几种主流数据迁移工具技术选型,yyds

前言 最近有些小伙伴问我,ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业应用来说,我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…...

Flink高手之路3-Flink的入门案例

文章目录Flink高手之路3-Flink的入门案例一、Flink的API二、Flink的编程模型三、Flink的编程步骤四、Flink的入门案例之一:批处理DataSet的处理1.创建一个maven项目2. 改pom文件,引入Flink的依赖3.创建相关的包和类,并测试环境是否搭建成功4.…...

MartriKon OPC Explorer的使用方法

MartriKon OPC Explorer的使用方法 关键词:opc,dcs,foxboro MartriKon OPC Explorer是Foxboro自带的opc测试系统。使用方法简单介绍如下:...

转型成为DevOps

做了8年的运维,接触的技术五花八门,没有自己的核心技能和知识。 从IDC建设到工业互联网项目,作为项目工程师,接触到了所有项目建设类的工作流程。 从硬件运维开始入门,把服务器、网络通讯、电脑终端、视频监控、大屏幕…...

Linux系统监控命令

在学习和使用过程中,汇总整理了一些常用的系统监控命令。 1.top top命令经常用来监控Linux的系统状况,比如cpu、内存的使用,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 第一行,任务队列信…...

环境变量的作用

定义: 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者…...

linux查看系统版本命令

linux版本问题是配置环境的基本,整理了一下查看系统版本的几个命令。 一、查看内核版本信息: 1、uname 利用uname可以查看各种linux内核信息: -a, --all 以如下次序输出所有信息。其中若-p 和 -i 的探测结果不可知则被省略: -s, …...

shell中单引号、双引号和反引号的区别

单引号’‘和双引号"" 两者都是解决变量中间有空格的问题。 在bash中“空格”是一种很特殊的字符,比如在bash中这样定义strthis is String,这样就会报错,为了避免出错就得使用单引号’‘和双引号""。 单引号’’&#xf…...

sh文件没有权限运行

sh脚本名称,可以不必事先设定shell的执行权限。因为这个是将要执行的sh06.sh作为参数传给sh(bash)命令来执行的。这时不是sh06.sh自己来执行,而是被人家调用执行,所以不要执行权限。 如果直接运行sh06.sh,就会报权限问题...

login shell配置文件的读取流程

介绍配置文件之前,先介绍两个概念:login shell、no-login shell login shell 取得 bash 时要完整的登录流程。no-login shell 取得 bash 接口时不需要重复的登录动作。如在 X Window 下登录后启动 bash 不需要输入密码。login shell 在启动的时…...