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

Selenium 中 JavaScript 点击的优势及使用场景

*在 Selenium 自动化测试中,使用 JavaScript 执行点击操作(如driver.execute_script("arguments[0].click();", element))相比直接调用element.click()有以下几个主要优势:

1. 绕过元素不可点击的限制

  • 问题场景:当元素被其他元素覆盖(如遮罩层、提示框)时,直接点击会抛出ElementClickInterceptedException

  • JS 点击优势:JavaScript 点击直接作用于 DOM 元素,无视视觉层面的遮挡,强制触发元素的点击事件。

示例

\# 当按钮被loading遮罩覆盖时,直接点击会失败button = driver.find\_element(By.ID, "submit-btn")driver.execute\_script("arguments\[0].click();", button)  # JS点击绕过覆盖问题

2. 处理隐藏元素或不可交互元素

  • 问题场景:某些元素(如下拉菜单选项、动态加载的元素)可能处于display: nonevisibility: hidden状态,直接点击会失败。

  • JS 点击优势:JavaScript 可以触发元素的点击事件,即使元素在视觉上不可见或不可交互。

示例

\# 隐藏的复选框无法直接点击checkbox = driver.find\_element(By.ID, "hidden-checkbox")driver.execute\_script("arguments\[0].click();", checkbox)  # 强制点击隐藏元素

3. 解决 React/Vue 等框架的事件绑定延迟

  • 问题场景:现代前端框架可能存在事件绑定延迟,直接点击时元素事件尚未完全注册。

  • JS 点击优势:JavaScript 直接操作 DOM,跳过框架的事件注册流程,确保点击立即生效。

4. 精确控制点击位置

  • 问题场景:某些元素的可点击区域与视觉区域不一致(如自定义滑块、Canvas 元素)。

  • JS 点击优势:可以通过 JavaScript 指定点击坐标,实现精确点击。

示例

\# 点击元素的左上角位置driver.execute\_script("arguments\[0].click();", element)  # 默认点击元素中心点driver.execute\_script("arguments\[0].dispatchEvent(new MouseEvent('click', {clientX: 10, clientY: 10}));", element)  # 自定义坐标

5. 提升执行效率

  • 直接点击开销:Selenium 的element.click()需要经过 WebDriver 协议与浏览器通信,涉及多次往返。

  • JS 点击优势:JavaScript 代码直接在浏览器中执行,减少通信开销,尤其适合高频点击场景。

6. 兼容特殊元素

  • 问题场景:某些自定义元素(如使用shadow DOM的组件)或 SVG 元素可能不响应常规点击。

  • JS 点击优势:JavaScript 可以穿透 Shadow DOM 边界,直接触发内部元素的事件。

示例

\# 点击Shadow DOM内的元素shadow\_host = driver.find\_element(By.ID, "shadow-host")shadow\_root = driver.execute\_script("return arguments\[0].shadowRoot", shadow\_host)inner\_element = shadow\_root.find\_element(By.ID, "inner-button")driver.execute\_script("arguments\[0].click();", inner\_element)  # 点击Shadow DOM内部元素

何时应该使用 JS 点击?

  1. 常规点击失败时:当元素被遮挡、不可见或抛出ElementClickInterceptedException时。

  2. 处理特殊元素:如隐藏元素、Shadow DOM 元素、Canvas 元素等。

  3. 性能优化:在高频点击场景(如循环点击)中提升执行速度。

注意事项

  • 绕过 UI 交互逻辑:JS 点击不会触发真实用户操作中的悬停、焦点等前置事件,可能导致测试覆盖不完整。

  • 视觉验证缺失:JS 点击不保证元素在视觉上被正确点击(如按钮状态变化),需结合断言验证结果。

  • 谨慎使用:优先使用常规点击,仅在必要时使用 JS 点击,避免掩盖页面设计缺陷。

总结

JavaScript 点击是 Selenium 自动化中的强力工具,适合解决复杂 DOM 结构和交互问题,但应作为备选方案,而非默认选择。合理结合常规点击与 JS 点击,可以提高测试的稳定性和可靠性。

相关文章:

Selenium 中 JavaScript 点击的优势及使用场景

*在 Selenium 自动化测试中,使用 JavaScript 执行点击操作(如driver.execute_script("arguments[0].click();", element))相比直接调用element.click()有以下几个主要优势: 1. 绕过元素不可点击的限制 问题场景&#x…...

Linux系统-基本指令(5)

文章目录 mv 指令cat 指令(查看小文件)知识点(简单阐述日志)more 和 less 指令(查看大文件)head 和 tail 指令(跟查看文件有关)知识点(管道)时间相关的指令&a…...

C++ set数据插入、set数据查找、set数据删除、set数据统计、set排序规则、代码练习1、2

set数据插入&#xff0c;代码见下 #include<iostream> #include<set> #include<vector>using namespace std;void printSet(const set<int>& s) {for (set<int>::const_iterator it s.begin(); it ! s.end(); it) {cout << *it <…...

[android]MT6835 Android 指令启动MT6631 wifi操作说明

问题说明 MT6835使用指令启动wifi 使用andorid指令启动 2.4G启动方式 cmd wifi start-softap ctltest wpa2 11111111 -b 2 5G启动指令 cmd wifi start-softap ctltest wpa2 11111111 -b 5 使用linux指令启动 指令启动wifi 新建br-lan brctl addbr br-lan 关闭wifi a…...

C# winform教程(二)

一、基础控件 常用的基础控件主要有按钮&#xff0c;文本&#xff0c;文本输入&#xff0c;组&#xff0c;进度条&#xff0c;等等。 基础控件 名称含义详细用法Button按钮Buttoncheckbox多选按钮Combobox下拉选择groupbox组控件label标签&#xff0c;显示文字panel控件集合&a…...

Java详解LeetCode 热题 100(25):LeetCode 141. 环形链表(Linked List Cycle)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 环形链表的可视化2.2 核心难点 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;快慢指针法&#xff08;…...

【仿生机器人】刀剑神域计划——仿生机器人.亚丝娜

我在做仿生机器人头&#xff0c;硬件部分已经搭建完毕&#xff0c;包括头部和颈部&#xff0c;用的23个舵机驱动机器人做表情&#xff0c;也支持头部的旋转&#xff08;就是颈部的功能&#xff09;&#xff0c;安装了摄像头在眼睛中&#xff0c;还有麦克风接受周围环境声音&…...

ARM架构推理Stable Diffusiond

代码仓库&#xff1a; https://github.com/siutin/stable-diffusion-webui-docker.git Docker容器地址&#xff1a; https://hub.docker.com/r/siutin/stable-diffusion-webui-docker/tags git clone https://github.com/siutin/stable-diffusion-webui-docker.git cd stabl…...

仓颉项目调试配置与多文件场景下的问题解析

1. 调试配置指南 在 VS Code 中配置好仓颉开发工具链后&#xff0c;只需按下 F5 或 Fn F5 即可启动调试。 在 CodeArts IDE for Cangjie 中&#xff0c;需先通过右上角的 编辑配置 -> 新增配置项 -> 选择 Cangjie (cjdb) Debug -> 选择 launch 模式 -> 点击 确认…...

Easyui悬停组件

文章目录 一、EasyUI 官方悬停解决方案&#xff1a;Tooltip 组件1. 基础用法2. 高级配置项 二、进阶场景&#xff1a;Datagrid 表格悬停扩展1. 监听行事件2. 第三方扩展包&#xff08;流云大神版&#xff09; 三、自定义悬停样式四、常见问题解决 在EasyUI中&#xff0c;没有直…...

MySQL 8.0 OCP 英文题库解析(十)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题81~90 试题81:…...

Python Pytest

1.Pytest用例发现规则 1.1 模块名(python文件)名必须以 test_ 开头或 _test 结尾&#xff0c;如 test_case&#xff0c;case_test&#xff0c;下划线都不能少 1.2 模块不能放在 . 开头的隐藏目录或者叫 venv的目录下&#xff0c;virtual environment&#xff0c;叫venv1都可以…...

金属膜电阻和碳膜电阻

1、性能比较 特性金属膜电阻对比碳膜电阻精度0.1% ~ 1%5% ~ 10%温度系数15 ~ 50 ppm/℃&#xff08;极低漂移&#xff09;200 ~ 1000 ppm/℃噪声0.1 μV/V 以下&#xff08;超低噪声&#xff09;1~5 μV/V&#xff08;中高频噪声显著&#xff09;高频特性寄生电感/电容小&…...

DNS (Domain Name System) 域名系统 将域名解析为 IP 地址

✅ DNS 服务器是指什么&#xff1f; **DNS 服务器&#xff08;Domain Name System Server&#xff09;是一个将域名&#xff08;如 www.baidu.com&#xff09;解析为 IP 地址&#xff08;如 220.181.38.150&#xff09;**的服务器。 &#x1f9e0; 一句话理解&#xff1a; DNS…...

如何轻松删除 Android 上的文件(3 种方法)

Android 手机是非常强大的设备&#xff0c;可让我们存储大量的个人数据&#xff0c;从照片和视频到应用程序和文档。然而&#xff0c;随着时间的推移&#xff0c;您的设备可能会因不再需要的文件而变得混乱。删除这些文件有助于释放空间并提高性能。在本指南中&#xff0c;我们…...

[特殊字符] Unity UI 性能优化终极指南 — ScrollRect篇

ScrollRect ManualScrollRect API 我参考了官方最新文档&#xff08;基于UGUI 3.0包&#xff09;&#xff0c;加上实际性能测试经验&#xff0c;直接给你梳理&#xff1a; &#x1f3af; Unity UI 性能优化终极指南 — ScrollRect篇 &#x1f9e9; 什么是 ScrollRect&#xff…...

自适应流量调度用于遥操作:面向时间敏感网络的通信与控制协同优化框架

英文标题&#xff1a;Adaptive Flow Scheduling for Teleoperation: A Communication and Control Co-Optimization Framework over Time-Sensitive Networks 中文标题&#xff1a;自适应流量调度用于遥操作&#xff1a;面向时间敏感网络的通信与控制协同优化框架 作者信息 …...

阿里云服务器-解决宝塔登录不成功

出现问题&#xff1a; This site can’t be reached XX.XX.XXX.XXX took too long to respond. Try: Checking the connection Checking the proxy and the firewall Running Windows Network Diagnostics ERR_CONNECTION_TIMED_OUT 可能是端口未开放 原因&#xff1a;服务器…...

6.3 day 35

知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 可视化 理解深度学习网络最重要的2点&#xff1a; 1.了解损失如何定…...

graphviz, dot, Error: lost rA sA edge; 独立的模块

1) 有向图dot文件 digraph R { node [shaperecord]; { ranksame rA sA tA } { ranksame uB vB wB } rA -> sA; sA -> vB; t -> rA; uB -> vB; wB -> u; wB -> tA; } 2&#xff09;出现报警信息 Warning: flat edge between adjacent …...

MicroROS简述

文章目录 前言1. 什么是MicroROS2. MicroROS的功能2.1 Micro-ROS 的核心作用&#xff1a;桥梁 翻译官2.2 为什么服务端&#xff08;Agent&#xff09;能知道设备端的消息和服务&#xff1f; 3. MicroROS出现的背景3.1 机器人系统的“断层”问题3.2 物联网与边缘计算的兴起3.3 …...

LeetCode Hot100刷题——完全平方数

279. 完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而…...

Axure-元件流程图

Axure-02 线框图元件使用 目标 元件基本介绍 基础元件的使用 表单型元件的使用 菜单与表格元件的使用 案例&#xff1a;个人简历表 元件基本介绍 概述 在Axure RP中&#xff0c;元件是构建原型图的基础模块。 将元件从元件库里拖拽到画布中&#xff0c;即可添加元件到你…...

LangChain系列之LangChain4j集成Spring Bot

<<< 书接上文 2. 代码示例 以下是一个集成 LangChain4j API 的 Spring Boot 应用示例。 2.1 创建 Spring Boot 项目 你可以使用SpringInitializr (https://start.spring.io/)来创建一个 Spring Boot 项目。选择 Maven 项目、Java 语言以及合适的 Spring Boot 版本…...

Python爬虫解析动态网页:从渲染到数据提取

一、动态网页与静态网页的区别 在开始之前&#xff0c;我们需要理解动态网页与静态网页的区别。静态网页的内容在服务器端是固定的&#xff0c;每次请求都会返回相同的结果&#xff0c;通常以HTML文件的形式存储。而动态网页则不同&#xff0c;其内容是通过JavaScript在客户端…...

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器

LLMs之MCP&#xff1a;如何使用 Gradio 构建 MCP 服务器 导读&#xff1a;本文详细介绍了如何使用Gradio构建MCP服务器&#xff0c;包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例&#xff0c;演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…...

VBA模拟进度条

在上一章中我跟大家介绍了ProgressBar控件的使用方法&#xff0c;但由于该控件无法在64位版本的Office中运行&#xff0c;为此我们可以采用Lable控件来模拟进度条的变化&#xff0c;以解决在64位版本的Office中无进度条控件的问题。 一、设计思路 添加两个重叠的Lable标签控件…...

MySQL强化关键_019_索引优化

目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 &#xff08;1&#xff09;使用范围查找 &#xff08;2&#xff09;索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型&#xff0c;查…...

高性能MCU的MPU与Cache优化详解

概述 在现代高性能单片机&#xff08;如ARM Cortex-M7、Cortex-A系列在MCU中的应用&#xff09;中&#xff0c;Memory Protection Unit (MPU) 和Cache系统的协同工作对系统性能有着决定性影响。本文将深入分析MPU配置如何影响Cache命中率&#xff0c;多主设备对RAM访问的竞争问…...

关于list集合排序的常见方法

目录 1、list.sort() 2、Collections.sort() 3、Stream.sorted() 4、进阶排序技巧 4.1 空值安全处理 4.2 多字段组合排序 4.3. 逆序 5、性能优化建议 5.1 并行流加速 5.2 原地排序 6、最佳实践 7、注意事项 前言 Java中对于集合的排序操作&#xff0c;分别为list.s…...