selenium鼠标操作实战案例详解

目录
  • 前言
  • ActionChains 类常用方法
  • 实例
    • 示例1
    • 示例2:
    • 实例3
    • 实例4
  • 总结

前言

人类频繁的用手操作鼠标和键盘,为了解决这个问题,selenium工具为我们提供了一个类来处理这些事件— Actionchains ,该类可以完成鼠标移动,鼠标点击事件、键盘输入、内容菜单交互等交互行为。

1、常见的鼠标操作有:单击、右键点击、双击、移动鼠标、拖拽鼠标。( Actionchains 代替人类之手去模拟鼠标操作,比如单击、双击、点击右键、拖拽、长按等动作)

2、selenium工具中全局鼠标操作语法如下:

第1步:初始化ActionChians类(动作链条): actions = ActionChains(driver)

第2步:找到要操作的元素: find_element

第3步:调用鼠标操作方法: actions.move_to_element(element)

第4步:执行鼠标操作方法: actions.perform()

3、实际上在调用 Actionchains 类的方法时,不会立即执行鼠标操作,而是会将所有的操作按顺序存放在一个队列里,最终调用 perform() 方法时,队列中的操作会依次进行。

( ActionChains 类提供了对动作的链式操作,也就是可以生成一个操作的队列,将复杂的操作过程分解成单个操作,然后组合起来一次性执行)

(在 ActionChains 类中所有提供的鼠标事件方法,在调用的时候所有的行为都存储在 ActionChains 对象中,而 perform() 方法就是真正去执行所有的鼠标事件。)

4、鼠标的操作都包含在 ActionChains 类中,所以要模拟鼠标操作是首先要导入该包: (对 ActionChains 类进行实例化对象操作,调用操作(元素)方法,再执行 perform() 方法。)

from selenium.webdriver.common.action_chains import ActionChains

ActionChains 类常用方法

1、click_and_hold(on_element=None) :点击鼠标左键,不松开

2、context_click(on_element=None) :点击鼠标右键

说明:对于点击鼠标右键,如果弹出的是浏览器默认的菜单,Selenium没有提供操作菜单选项的方法; 如果是自定义的右键菜单,则可以通过元素定位来操作菜单中的选项。

3、double_click(on_element=None) :双击鼠标左键

4、drag_and_drop(source, target) :拖拽到某个元素然后松开

说明:模拟鼠标拖动动作,选定拖动源元素释放到目标元素后鼠标松开。

1.源元素:source = driver.find_element_by_id(xxx)

2.目标元素 :target = driver.find_element_by_id(xxx)

3.调用方法 :action.drag_and_drop(source, target).perform()

5、move_by_offset(xoffset, yoffset) :鼠标从当前位置移动到某个坐标

6、move_to_element(to_element) :鼠标移动到某个元素

说明: 模拟鼠标悬停在指定的的元素上

7、release(on_element=None) :在元素上释放按住的鼠标按钮(在某个元素位置松开鼠标左键)

8、pause(seconds) :暂停操作(秒)

ActionChains 类其他方法

1、 perform(self) --执行鼠标操作方法

2、 reset_actions() :清除已在队列中的鼠标操作命令

3、 click(on_element=None) :点击鼠标左键

4、 click_and_hold(on_element=None) :点击鼠标左键,不松开

5、 context_click(on_element=None) :点击鼠标右键

6、 double_click(on_element=None) :双击鼠标左键

7、 drag_and_drop(source, target) :拖拽到某个元素然后松开(需要获取到目标位置的元素定位)

8、 drag_and_drop_by_offset(source, xoffset, yoffset) :拖拽到某个坐标然后松开(需要获取到目标位置的位置坐标)

9、 key_down(value, element=None) :按下某个键盘上的键

10、key_up(value, element=None) :松开某个键

11、 move_by_offset(xoffset, yoffset) :鼠标从当前位置移动到某个坐标(需要获取到目标位置的位置坐标)

12、 move_to_element(to_element) :鼠标移动到某个元素

13、 move_to_element_with_offset(to_element, xoffset, yoffset) :移动到距某个元素(左上角坐标)多少距离的位置

14、 pause(seconds) :暂停操作(秒)—结合使用,比如:鼠标移动到某元素上悬停的时间。(暂停所有动作,相当于等待,用于链式操作过程中的等待)

15、 release(on_element=None) :在元素上释放按住的鼠标按钮,与 click_and_hold(on_element=None) 点击鼠标左键不松开结合使用。(如果有鼠标按下的操作,那么需要通过 release() 方法释放鼠标)

16、 send_keys(*keys_to_send) :发送某个键到当前焦点的元素

17、 send_keys_to_element(element, *keys_to_send) :发送某个键到指定元素

实例

示例1

1、鼠标单击操作: ac.click(element).perform()

2、元素单击操作: element.click()

3、移动操作(鼠标悬停): ac.move_to_element(element).perform()

将鼠标移动至右侧【设置】处,并点击【高级搜索】

示例2:

import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
driver.implicitly_wait(5)

# 定位百度首页右上角的设置元素
set_ele = driver.find_element(by=By.XPATH, value="//span[@id='s-usersetting-top']")

# # 第一步:创建一个鼠标操作的对象
action = ActionChains(driver)
# # 第二步:添加移动操作
action.move_to_element(set_ele)
# # 第三步:执行动作
action.perform()

# 三行代码可写成一行:支持链式调用
# ActionChains(driver).move_to_element(set_ele).perform()

# (鼠标移动到设置元素后,会出现一个下选框,其中有高级搜索) 显式等待设置:高级搜索可点击
WebDriverWait(driver, 5, 0.2).until(
    EC.element_to_be_clickable((By.XPATH, "//a[text()='高级搜索']"))
).click()

time.sleep(5)
driver.quit()

实例3

代码如下:

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver

chr_driver = webdriver.Chrome()
chr_driver.maximize_window()
chr_driver.get("https://www.baidu.com/")

ele = chr_driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
# 实例化,悬浮、点击,可以连续调用多个方法,是因为返回的都是self对象
ActionChains(chr_driver).move_to_element(ele).pause(0.5).click(ele).perform()

实例4

1、鼠标右键单击操作

# 创建浏览器实例对象
driver = webdriver.Chrome()
# 创建鼠标实例化对象
chains = ActionChains(driver)
# 访问商城网站
driver.get("http://39.98.138.157/shopxo/index.php")
# 最大化浏览器窗口
driver.maximize_window()
# 通过 xpath 定位用户名
username = driver.find_element_by_xpath("//input[@name='accounts']")
# 再鼠标右键单击输入框
chains.context_click(username).perform()

2、鼠标左键双击动作

# 创建浏览器实例对象
driver = webdriver.Chrome()
# 创建鼠标实例化对象
chains = ActionChains(driver)
# 访问商城网站
driver.get("http://39.98.138.157/shopxo/index.php")
# 最大化浏览器窗口
driver.maximize_window()
# 通过 xpath 定位用户名
username = driver.find_element_by_xpath("//input[@name='accounts']")
# 再鼠标双击全选输入框内容
chains.double_click(username).perform()

3、鼠标悬停操作

# 创建浏览器实例对象
driver = webdriver.Chrome()
# 创建鼠标实例化对象
chains = ActionChains(driver)
# 访问商城网站
driver.get("http://39.98.138.157/shopxo/index.php")
# 最大化浏览器窗口
driver.maximize_window()
# 通过 xpath 定位登录文本
login = driver.find_element_by_xpath("//div[@class='member-login']/a[text()='登录']")
# 再让鼠标悬停到该元素上
chains.move_to_element(login).perform()

4、鼠标将某元素拖拽到另一个元素的位置后松开

# 创建浏览器实例对象
driver = webdriver.Chrome()
# 创建鼠标实例化对象
chains = ActionChains(driver)
# 访问商城网站
driver.get("http://39.98.138.157/shopxo/index.php")
# 最大化浏览器窗口
driver.maximize_window()
# 先定位被拖拽的元素
source = driver.find_element_by_xpath('//*[@id="doc-topbar-collapse"]/ul/li[1]/a')
# 再定位目标元素
target = driver.find_element_by_xpath("//input[@name='accounts']")
# 最后调用 drag_and_drop 方法将定位到的source元素拖拽到目标元素target
chains.drag_and_drop(source, target)

5、鼠标移动到指定元素

element = driver.find_element_by_id('xxx')
ActionChains(driver).move_to_element(element).perform()

6、鼠标以某个元素位置为原点,在该元素位置的横向和纵向格移动100像素

element = driver.find_element_by_id('xxx')
ActionChains(driver).move_to_element_with_offset(element, 100, 100).perform()

7、双击元素(如果没有指定元素则在当前鼠标所在位置双击)

element = driver.find_element_by_id('xxx')
ActionChains(driver).double_click(element).perform()

8、在指定元素上点击鼠标右键(如果没有指定元素则在当前鼠标所在位置单击右键)

element = driver.find_element_by_id('xxx')
ActionChains(driver).context_click(element).perform()

9、鼠标左键在某元素处按下不松(如果没有指定元素则在当前鼠标所在位置按下左键不松开)

element = driver.find_element_by_id('xxx')
ActionChains(driver).click_and_hold(element).perform()

10、鼠标按住element1元素,拖动到element2元素。

element1 = driver.find_element_by_id('xxx')
element2 = driver.find_element_by_id('xxx')
ActionChains(driver).drag_and_drop(element1, element2).perform()

11、鼠标拖动某指定元素向左上角横向纵向移动100像素

element = driver.find_element_by_id('xxx')
ActionChains(driver).drag_and_drop_by_offset(element, -100, -100)

总结

到此这篇关于selenium鼠标操作实战案例的文章就介绍到这了,更多相关selenium鼠标操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java Selenium中的鼠标控制操作

    目录 简介 鼠标控制 单击左键 单击右键 双击左键 按压左键 鼠标箭头移动 鼠标释放 鼠标拖拽 鼠标等待 简介 本文主要讲解如何用java Selenium 控制鼠标在浏览器上的操作方法.主要列举的代码示例,无图显示.可以自己上代码执行操作看效果. 鼠标控制 单击左键 模拟完成单击鼠标左键的操作,一般点击进入子页面等会用到. 第一种通过WebElement对象的click()方法实现单击左键 import org.openqa.selenium.By; import org.openqa.sel

  • Selenium鼠标与键盘事件常用操作方法示例

    本文实例讲述了Selenium鼠标与键盘事件常用操作方法.分享给大家供大家参考,具体如下: Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等.这个工具的主要功能包括:测试与浏览器的兼容性--测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上.测试系统功能--创建回归测试检验软

  • python 基于selenium实现鼠标拖拽功能

    1.准备html文件 首先我们需要准备一个鼠标滑动的html文件,用来演示鼠标滑动的效果,注意需要将我们的html文件放在自己的服务器上, 这样我们才能够通过selenium来进行验证.html文件如下: <html> <head> <meta charset="utf-8" /> <style> body { margin: 0; padding: 0; } input{ appearance:none; -moz-appearance

  • Python爬虫之Selenium鼠标事件的实现

    一.常用方法 函数名 说明 click(on_element=None) 点击鼠标右键 click_and_hold(on_element=None) 点击鼠标左键,不松开 release(on_element=None) 在某个元素位置松开鼠标左键 context_click(on_element=None) 点击鼠标右键 double_click(on_element=None) 双击鼠标左键 drag_and_drop(source, target) 拖拽到某个元素然后松开 drag_an

  • Python selenium键盘鼠标事件实现过程详解

    引言 ----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的 keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrl+a,Ctrl+v等. 举例: #cording=gbk import os import time from selenium import webdriver from selenium.webdriver.common.by import By #导入by方法 from selenium.webdriver.common.action_cha

  • C# ManagementObjectSearcher操作window案例详解

    在刚学C#,用ManagementObjectSearcher 竟然不能解析到头文件,需要手动 Add Referance.. 前言:  我们在很多情况下想要获得计算机的硬件或操作系统的信息,比如获得CPU序列号给自己的软件添加机器码锁绑定指定电脑.又或者想要获得硬盘分区,声卡显卡等信息. 开篇: 我们用到的主要类是ManagementObjectSearcher,该类在System.Management命名空间下.  有时候我们可以通过Environment获得一些简单的系统信息.  如:En

  • C# XmlDocument操作XML案例详解

    C# XmlDocument操作XML XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized  Markup Language,标准通用标记语言).它没有标签集(tag set),也没有语法规则(grammatical rule),但是它有句法规则(syntax rule). 任何XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed),即每一个打开

  • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)

    目录 背景 实现过程 1)替换Word模板生成对应邀请函 2)将Word邀请函转化为Pdf格式 4)自动发送邮件 5)完整代码 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换

  • Swift中闭包实战案例详解

    前言 无论苹果的官方文档还是由官方文档衍生出来的一些文章和书籍都比较重视基础语法知识的讲解,对于实战中的应用提及的都很少,所以当我们想使用"闭包"解决一些问题的时候,会忽然出现看着一堆理论知识却不知从何下手的尴尬感,这就是理论和时实战的区别了. 本文不赘述Swift闭包的的基本语法了,百度或者Google下有很多资料.如题所示本文着重讲述Swift闭包的一些实战案例,有需要的小伙伴可以参考下,经验丰富的大神也请指教. 关于如何理解闭包 学习闭包的第一个难点就是理解闭包,可能很多人用了很

  • Spring AOP定义Before增加实战案例详解

    本文实例讲述了Spring AOP定义Before增加.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:

  • Aspectj框架实战案例详解

    本文实例讲述了Aspectj框架.分享给大家供大家参考,具体如下: 一 环境变量配置 CLASSPATH配置为: .;d:\aspectj1.8\lib\aspectjrt.jar;D:\Program\Java\jdk1.8.0_162\lib\dt.jar;D:\Program\Java\jdk1.8.0_162\lib\tools.jar; path要配置为: d:\aspectj1.8\bin 二 代码 1 JavaBean Hello.java package org.crazyit.

  • MongoDB模糊查询操作案例详解(类关系型数据库的 like 和 not like)

    1.作用与语法描述 作用: 正则表达式是使用指定字符串来描述.匹配一系列符合某个句法规则的字符串.许多程序设计语言都支持利用正则表达式进行字符串操作.MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式. 语法一 { <field>: { $regex: /pattern/, $options: '<options>' } } { <field>: { $regex: 'pattern', $options: '<options>' } }

  • SpringBoot实战之高效使用枚举参数(原理篇)案例详解

    找入口 对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方法中的ha.handle(processedRequest, response, mappedHandler.getHandler())逻辑.我们从这里出发,一层一层向里扒. 跟着代码深入,我们会找到org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest的

  • SpringBoot实战之实现结果的优雅响应案例详解

    今天说一下 Spring Boot 如何实现优雅的数据响应:统一的结果响应格式.简单的数据封装. 前提 无论系统规模大小,大部分 Spring Boot 项目是提供 Restful + json 接口,供前端或其他服务调用,格式统一规范,是程序猿彼此善待彼此的象征,也是减少联调挨骂的基本保障. 通常响应结果中需要包含业务状态码.响应描述.响应时间戳.响应内容,比如: { "code": 200, "desc": "查询成功", "tim

  • SpringBoot实战之处理异常案例详解

    前段时间写了一篇关于实现统一响应信息的博文,根据文中实战操作,能够解决正常响应的一致性,但想要实现优雅响应,还需要优雅的处理异常响应,所以有了这篇内容. 作为后台服务,能够正确的处理程序抛出的异常,并返回友好的异常信息是非常重要的,毕竟我们大部分代码都是为了 处理异常情况.而且,统一的异常响应,有助于客户端理解服务端响应,并作出正确处理,而且能够提升接口的服务质量. SpringBoot提供了异常的响应,可以通过/error请求查看效果: 这是从浏览器打开的场景,也就是请求头不包括content

随机推荐

其他