Selenium基础 — 鼠标操作

2023-11-15

1、鼠标事件介绍

前面例子中我们已经学习到可以用click()来模拟鼠标的单击操作,而我们在实际的web产品测试中发现,有关鼠标的操作,不单单只有单击,有时候还要用到右击,双击,拖动等操作,这些操作包含在ActionChains类中。

2、ActionChains 类鼠标操作的常用方法

事件 说明
context_click() 右击
double_click() 双击(常用)
drag_and_drop() 拖动(常用)
move_to_element() 鼠标悬停在一个元素上(常用)
click_and_hold() 按下鼠标左键在一个元素上

注意:Seleniun只能实现在页面中单击右键,但是右键后出现的菜单界面上,还不支持定位,也就不能操作。

3、perform()方法

ActionChains用于生成用户的行为。所有的行为都存储在ActionChains对象。
perform()方法执行所有ActionChains中存储的行为。

4、鼠标事件操作步骤

  1. 引入包ActionChains()
    # 两种导入都可以 from selenium.webdriver import ActionChains from selenium.webdriver.common.action_chains import ActionChains
    这里需要注意的是,在使用ActionChains类下面的方法之前,要先将包引入。
  2. 定位需要鼠标操作的元素。
  3. 执行鼠标事件。
    """ 1. 语法: ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform() 2. 说明: driver: wedriver实例执行用户操作,也就是当前浏览器对象。 鼠标事件(元素):双击,拖拽,悬停等动作,需要将操作的元素定位出来并且穿入相应的动作中。 perform() : 执行 """ # 1. 定位注册按钮 button = driver.find_element_by_css_selector("button[type='submitA']") # 2. 执行鼠标悬停事件 ActionChains(driver).move_to_element(button).perform()
    perform()执行所有ActionChains中存储的行为。
    perfrome()同样也是ActionChains类提供的的方法,通常与ActionChains()配合使用。

5、示例

(1)右键单击、左键双击

"""
1.学习目标:
    必须掌握鼠标的操作方法
2.语法
    2.1 导入ActionChains
        from selenium.webdriver.common.action_chains import ActionChains
        from selenium.webdriver import ActionChains
    2.2 使用方法
        ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2.3 鼠标右键
        context_click(需要操作的元素)
    2.3 鼠标双击
        double_click(需要操作的元素)
3.需求
    在百度页面中,完成鼠标右击和鼠标双击动作
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
# from selenium.webdriver.common.action_chains import ActionChains

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开百度页面
url = "https://www.baidu.com/"
driver.get(url)

# 4.在百度首页右键单击、左键双击
# 4.1 右键单击
# 4.1.1 定位百度首页logo
logo = driver.find_element_by_css_selector("#lg > map > area")

# 4.1.2 在logo图片上右击鼠标
ActionChains(driver).context_click(logo).perform()

# 4.2 左键双击 百度一下
# 4.2.1 定位百度输入框
baidu_element = driver.find_element_by_id("kw")

# 4.2.2 在输入框中输入【心善渊&Selenium基础】
baidu_element.send_keys("【心善渊&Selenium基础】")
sleep(3)

# 4.2.3 定位按钮 百度一下
yixia_element = driver.find_element_by_id("su")

# 4.2.4 左键双击 百度一下
ActionChains(driver).double_click(yixia_element).perform()
sleep(3)

# 5.关闭浏览器
driver.quit()

(2)鼠标拖拽动作

动作描述:

  • 在源元素上按下鼠标左键,然后移动到目标元素上释放。
  • source:鼠标拖动的源元素。
  • target:鼠标释放的目标元素。

页码代码片段:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>拖拽div</title>
    <style type="text/css">
        div {
            position: absolute;
            width: 150px;
            height: 150px;
            background-color: red;
        }
    </style>
<body>
<div id="div1"></div>
<div id="div2" style="left:170px; background-color:green"></div>
</body>
</html>

注:需要自己写拖动脚本,这只是个式样。

脚本代码:

"""
1.学习目标:
    必须掌握鼠标拖拽的使用
2.语法
    2.1 导入ActionChains
        from selenium.webdriver.common.action_chains import ActionChains
        from selenium.webdriver import ActionChains
    2.2 使用方法
        ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2.3 鼠标拖拽动作
        (1)把一个元素,拖拽到目标元素位置
            drag_and_drop(起始元素,终止元素)
        (2)把一个元素拖动到页面指定位置
            drag_and_drop_by_offset(元素, 横坐标, 纵坐标)

3.需求
    在页面中,完成鼠标拖拽动作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver import ActionChains

# from selenium.webdriver.common.action_chains import ActionChains

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开页面
url = "file:///" + os.path.abspath("./练习页面/drop.html")
driver.get(url)

# 4.使用鼠标拖拽方法
# 4.1 把一个元素,拖拽到目标元素位置
# 4.1.1 定位起始元素和终止元素
red = driver.find_element_by_id("div1")  # 定位红色
green = driver.find_element_by_id("div2")  # 定位绿色
sleep(2)
# 4.1.2 执行鼠标拖拽
ActionChains(driver).drag_and_drop(red, green).perform()
sleep(2)
# 4.2 将绿色元素拖动到页面指定位置
# 4.2.1 定位绿色元素
green_1 = driver.find_element_by_id("div1")

# 4.2.2 执行鼠标拖拽,(600, 200)为坐标
ActionChains(driver).drag_and_drop_by_offset(green_1, 600, 200).perform()

# 5.关闭浏览器
driver.quit()

(3)鼠标悬停、按下动作

页面代码片段:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>注册A</title>
    <style type="text/css">
        /*悬停-绿色*/
        button:hover {
            padding: 10px;
            background: green;
        }

        /*按下状态-红色*/
        button:active {
            padding: 10px;
            background: red;
        }

    </style>
</head>
<body>
<form action="">
    <div id="zc">
        <p>
            <button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
        </p>
    </div>
</form>
</body>
</html>

脚本代码:

"""
1.学习目标:
    必须掌握鼠标悬停、按下的操作方法
2.语法
    2.1 导入ActionChains
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver import ActionChains
    2.2 使用方法
    ActionChains(driver).鼠标事件(需要鼠标操作的元素).perform()
    2.3 鼠标悬停
        move_to_element(需要操作的元素)
    2.4 鼠标按下
        click_and_hold(需要操作的元素)
3.需求
    在页面中,完成上述操作。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver import ActionChains

# 2.打开浏览器
driver = webdriver.Chrome()

# 3.打开页面
url = "file:///" + os.path.abspath("./4.html")
driver.get(url)
sleep(2)

# 4.对注册按钮,执行鼠标悬停、按下事件
# 4.1 鼠标悬停-按钮变黄
# 4.1.1 定位注册按钮
button = driver.find_element_by_css_selector("button[type='submitA']")

# 4.1.2 执行鼠标悬停事件
ActionChains(driver).move_to_element(button).perform()
sleep(3)

# 4.2 鼠标按下,按钮变红
# 4.2.1 执行鼠标按下事件
ActionChains(driver).click_and_hold(button).perform()
sleep(3)

# 5.关闭浏览器
driver.quit()

最好我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了

1、学习思路和方法

这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习
 

2、想学习却无从下手,该如何学习?

这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium基础 — 鼠标操作 的相关文章

  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • 无法摆脱脚本中的硬编码延迟

    我用 vba 结合 selenium 编写了一个脚本来解析网页中可用的所有公司名称 该网页启用了延迟加载方法 因此每个滚动中只有 20 个链接可见 如果我滚动 2 次 则可见链接数为 40 个 依此类推 该网页中有 1000 个可用链接 我
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • 将 numpy 代码点数组与字符串相互转换

    我有一个很长的 unicode 字符串 alphabet range 0x0FFF mystr join chr random choice alphabet for in range 100 mystr re sub W mystr 我想
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • Werkzeug 中的线程和本地代理。用法

    首先 我想确保我正确理解了功能的分配 分配本地代理功能以通过线程内的模块 包 共享变量 对象 我对吗 其次 用法对我来说仍然不清楚 也许是因为我误解了作业 我用烧瓶 如果我有两个 或更多 模块 A B 我想将对象C从模块A导入到模块B 但我
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • 在 Windows 上使用带有对数刻度的 matplotlib 时出现 Unicode 错误

    我正在使用 python 2 6 和 matplotlib 如果我运行 matplotlib 库页面中提供的示例 histogram demo py 它工作正常 我已经大大简化了这个脚本 import numpy as np import
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • 操作错误:(sqlite3.OperationalError) SQL 变量太多,同时将 SQL 与数据帧一起使用

    我有一个熊猫数据框 如下所示 activity User Id 0 VIEWED MOVIE 158d292ec18a49 1 VIEWED MOVIE 158d292ec18a49 2 VIEWED MOVIE 158d292ec18a4
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • 如何有效保证Java代码单元测试覆盖率

    背景介绍 我们在实际项目开发过程中 不同level的童鞋由于专业技能的层次不同 导致在参与实际开发的业务代码中经常会出现各种bug 项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug 也有各种客观原因的PM不会在项目中预留
  • Spring Boot使用方法

    Spring Boot 七步走 1 勾选包 Spring Boot是自带TomCat的 创建Spring Boot工程文件 创建时需要更改资源下载地址 我选择阿里云的这个地址 而且Spring Boot不需要导包 只需要勾选需要的包 进入后
  • 深度学习基础:SVD奇异值分解及其意义【转】

    排版较好的一版 http shartoo github io SVD decomponent 上面的补充 奇异值的物理意义是什么 https www zhihu com question 22237507 answer 225371236
  • 使用 ELK 收集日志

    在当前分布式 微服务架构下 各个应用都部署在不同的服务器上 每个应用都在记录着自己重要或者不重要的日志信息 当我们要通过日志信息来排查错误时 可以根据出错应用在对应的机器上找报错相关的日志信息 但是 可能我们不具有相应服务器的访问权限 也可
  • 初学者入门:认识STM32单片机

    本教程含有较多专业词汇 大部分时候 不完全理解并不影响继续往下阅读 大家只需要了解大致的概念即可 当然 也鼓励大家多查百度和多问chatgpt 让自己学会的更多 什么是单片机 单片机 就是把中央处理器CPU 存储器 等计算机的功能部件 和定
  • C语言进阶:文件操作,学生信息管理系统

    文章目录 1 重定向 2 读文件和写文件 3 打开文件和关闭文件 4 综合大题 学生信息管理系统 5 二进制读文件和二进制写文件 6 文件定位 7 其他文件操作函数 8 系统再优化之用户登录与注册 1 重定向 重定向文件输出 把运行出来的内
  • WSL子系统启动报错 Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE

    今天琢磨着WindowsLinux子系统研究研究新东西 结果当我启动WSL时却出现了下面的提示 WSL启动报错 由于未安装所需的特性 无法启动操作 Error code Wsl Service CreateInstance CreateVm
  • url pattern中/与/*的区别

  • 爬虫入门级(五)

    Python爬虫入门级 五 实现两个小案例 1 gt 爬取豆瓣电影的TOP250 2 gt 爬取电影的资源下载地址 爬取豆瓣电影的TOP250 1 分页爬取数据 2 csv数据加载到本地 抓取豆瓣电影排行 1 判断页面元代满是否有数据 2
  • Postman 发送GET请求传递List自定义对象参数举例

    这是一个GET请求 后端接收方式 用List
  • 微服务简介

    微服务简介 微服务架构是一种软件架构模式 它将一个大型应用程序拆分为一组小型 独立的服务 每个服务都有自己的业务逻辑和数据存储 这些服务可以独立开发 部署和扩展 通常使用HTTP或其他轻量级通信协议进行通信 以下是微服务架构的一些关键特点和
  • android基础知识题,史上最全的Android面试题集锦

    Android基本知识点 1 常规知识点 1 Android类加载器 在Android开发中 不管是插件化还是组件化 都是基于Android系统的类加载器ClassLoader来设计的 只不过Android平台上虚拟机运行的是Dex字节码
  • 找不到该项目(无法删除文件)

    win10桌面新建文件提示 找不到该项目 该项目不在C users 中 请确认该项目的位置 然后重试 的原因是系统错误导致的 具体解决方法步骤如下 1 首先新建一个txt文件 为了方便txt文件建在跟目标文件供一个目录下 2 然后把下面代码
  • 学习lava源码时遇到的python知识

    内置函数 参考 https docs python org 3 7 library functions html Built in Functions abs delattr hash memoryview all dict help mi
  • MVC 模式与三层架构

  • Pr批量字幕制作

    一 标题字幕 1 选择文件 新建 旧版标题 2 根据所需设置一下 视频属性的高宽 是根据自己视频情况而定 一般新建的时候 就会根据自己导入的视频而显示 无需再设置 3 添加文字后 根据自己所需设置所需字幕 钢笔工具可以设置字幕移动 滚动字幕
  • 第十三届蓝桥杯大赛软件组省赛 Python大学A组 个人题解

    Link 文章目录 Python大学A组 个人题解 试题 A 裁纸刀 思路 代码 试题 B 寻找整数 思路 代码 试题 C 质因数个数 思路 代码 试题 D 矩形拼接 思路 代码 试题 F 重新排序 思路 代码 试题 G 全排列的价值 思路
  • Spring 系列

    前面几篇文章我们聊过IOC以及Spring IOC 其中Spring IOC 的一个实现方式包含 依赖查找 和依赖注入 本文我们进一步详细聊一下 SpringIOC的依赖查找 及其对应的方式 以及安全性 内置依赖等 查找类型 1单一类型 根
  • QTableView 添加进度条、下拉选择框、日历、图片、文字等(QAbstractItemDelegate)

    本文主要记录QTableView 使用代理添加进度条 下拉选择框 日历等 并实现复制粘贴 右键菜单等 效果如下图所示 最后有动态展示 图片说明 1 图中红色1处是 和 双击可以相互切换显示 2 图中红色2处是Qspinbox 实现整数输入
  • Selenium基础 — 鼠标操作

    1 鼠标事件介绍 前面例子中我们已经学习到可以用click 来模拟鼠标的单击操作 而我们在实际的web产品测试中发现 有关鼠标的操作 不单单只有单击 有时候还要用到右击 双击 拖动等操作 这些操作包含在ActionChains类中 2 Ac