探索Selenium:通过JavaScript增强UI测试效率和效果

在自动化测试中,模拟用户的行为只是任务的一部分。许多时候,测试人员需要更多的控制和灵活性,以验证应用程序的功能和性能。Selenium WebDriver 提供了执行 JavaScript 代码的能力,这一特性为测试人员打开了新的可能性。本文将深入探讨使用 Selenium 执行同步和异步 JavaScript 脚本的技巧和方法,特别是如何利用 JavaScript 来控制页面的滚动条。

1. 同步执行 JavaScript

Selenium 的 execute_script 方法允许测试脚本直接执行 JavaScript 代码。这在需要对 DOM 元素执行操作或调用页面上存在的 JavaScript 函数时非常有用。

driver.execute_script("alert('Hello, World!');")
2. 异步执行 JavaScript

对于需要等待异步操作(如 AJAX 请求)完成的场合,execute_async_script 可以派上用场。它会继续执行,直到指定的 JavaScript 代码返回一个Promise对象。

script = '''
var callback = arguments[arguments.length - 1];
fetch('https://api.example.com/data').then(response => response.json()).then(data => callback(data));
'''
result = driver.execute_async_script(script)
3. 控制页面滚动条

有时,测试案例需要验证在页面的不同部分显示的元素。通过 JavaScript 来控制滚动条是一个高效的方法。

a. 滚动到特定元素
element = driver.find_element(By.ID, "targetElementId")
coordinates = element.location_once_scrolled_into_view
driver.execute_script(f"window.scrollTo({coordinates['x']}, {coordinates['y']});")
b. 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
c. 平滑滚动

有时候,测试需要模拟真实的用户滚动行为,比如平滑滚动。

driver.execute_script("window.scrollBy({ top: -document.body.scrollHeight, behavior: 'smooth' });")
4. 页面交互

JavaScript 的执行不仅限于页面滚动。通过 JavaScript,可以实现更复杂的页面交互,例如模拟用户的鼠标点击、键盘输入等。

js = '''
var element = document.getElementById('buttonId');
if (element) {element.click();
}
'''
driver.execute_script(js)
5. 动态修改样式

测试中可能需要改变元素的样式来验证某些条件下的 UI 表现。

driver.execute_script("document.getElementById('myElement').style.display = 'none';")
**6.示例代码 **
```python
#!/usr/bin/python3
# coding=utf-8
"""
@author: Jeffky
@file: demo12.py
@time: 2024-6-19 9:19
"""
from selenium import webdriver
from time import sleepfrom selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import Byclass TestCase(object):def __init__(self):self.driver = webdriver.Chrome()  # 初始化 Chrome 浏览器驱动self.driver.maximize_window()  # 最大化浏览器窗口self.driver.get('https://www.baidu.com/')  # 打开百度首页def test1(self):self.driver.execute_script("('test')")  # 执行 JavaScript 代码sleep(2)  # 等待 2 秒self.driver.switch_to..accept()  # 切换到弹出的对话框并点击确认按钮(此处有误,需要修改)sleep(2)  # 等待 2 秒def test2(self):js = "return document.title"  # 定义获取网页标题的 JavaScript 代码title = self.driver.execute_script(js)  # 执行 JavaScript 代码并获取网页标题print(title)  # 打印网页标题def test3(self):js = 'var q = document.getElementById("kw"); q.style.border="2px solid red"'  # 定义设置搜索框边框颜色的 JavaScript 代码self.driver.execute_script(js)  # 执行 JavaScript 代码sleep(5)  # 等待 5 秒def test4(self):self.driver.find_element(By.ID, 'kw').send_keys('selenium')  # 在搜索框中输入关键词 "selenium"self.driver.find_element(By.ID, 'su').click()  # 点击搜索按钮sleep(2)  # 等待 2 秒js = 'window.scrollTo(0, document.body.scrollHeight)'  # 定义滚动到页面底部的 JavaScript 代码self.driver.execute_script(js)  # 执行 JavaScript 代码sleep(5)  # 等待 5 秒if __name__ == '__main__':case = TestCase()  # 创建测试用例对象# case.test1()  # 执行 test1 方法(已注释掉)# case.test2()  # 执行 test2 方法(已注释掉)# case.test3()  # 执行 test3 方法(已注释掉)case.test4()  # 执行 test4 方法

#### **7. 总结**通过 Selenium 的 `execute_script` 和 `execute_async_script` 方法,测试人员可以灵活地执行同步或异步 JavaScript 代码,实现从简单的 DOM 操作到复杂的页面交互和数据获取。这些能力极大地扩展了自动化测试的范围,使得测试脚本能够更贴近真实世界的使用场景。掌握这些技巧,将使自动化测试不仅能够验证基本的用户界面行为,还能深入到页面渲染的细节之中,提高测试覆盖率和有效性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品经理方法论

1、用户体验 5 要素 1,表现层是你拿到一个产品以后,视觉表现,配色,布局,排版等等 2,框架层,是交互层面的东西,比如,操作情况,刷新,页面跳转&…

ChatmoneyAI如狂风般席卷广告创意舞台,轻松闯荡财富之海!

本文由 ChatMoney团队出品 引言 在广告创意行业,创新和高效是赢得市场的关键。而我今天要分享的就是如何利用ChatmoneyAI这款强大的人工智能工具,打破创新难题,赚取丰厚收益。 让我告诉你一个小秘密,有客户曾在一个月内&#xf…

git merge(3个模式) 与 git rebase 图文详解区别

目录 1 git merge1.1 模式一:fast-forward(–ff)1.2 模式二:non-Fast-forward(–no-ff)1.3 模式三:fast-forward only(–ff-only) 2 git rebase3 区别 1 git merge git merge有好几种不同的模式 默认情况下你直接使用 git merge 命令&#x…

从boost库到时间戳

一、以问题引入 授权证书一般有到期时间的说法,公司测试同事在测试更新后的证书时,将系统时间调到了2050年,重启服务后发现各个进程的cpu占用率特别高;结合日志分析,发现这些进程 都在不停的刷heartbeat()的日志&#…

C++17并行算法与HIPSTDPAR

C17 parallel algorithms and HIPSTDPAR — ROCm Blogs (amd.com) C17标准在原有的C标准库中引入了并行算法的概念。像std::transform这样的并行版本算法保持了与常规串行版本相同的签名,只是增加了一个额外的参数来指定使用的执行策略。这种灵活性使得已经使用C标准…

AI 音乐大模型:创新的曙光还是创意产业的阴影?

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

JavaScript Window History

JavaScript Window History 简介 JavaScript 中的 window.history 对象提供了与浏览器历史记录交互的能力。这个对象是 window 对象的一个属性,允许开发者访问和操作用户在浏览器中的导航历史。通过 window.history,开发者可以实现页面后退、前进以及添加新的历史记录等功能…

有效的字母异位词--力扣242

有效的字母异位词 题目思路C代码 题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。s 和 t 仅包含小写字母。 示例 1: 输入: s “an…

字符串的相关函数

1.strcpy 字符串拷贝函数 头文件&#xff1a; #include <string.h> char *strcpy(char *dest, const char *src); 参数&#xff1a; const char *src&#xff1a;被拷贝字符串的首地址 char *dest&#xff1a; 拷贝到目标的首地址 返回值&#xff1a; …

云原生-k8s中的 Tab 自动补全功能

文章目录&#xff1a; 1、首先你需要安装bash-completion&#xff0c;能够自动补全 2、配置环境变量 3、生效此配置 1、首先你需要安装bash-completion&#xff0c;能够自动补全 yum -y install bash-completion2、配置环境变量 echo source <(kubectl completion b…

[面试题]Kafka

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

RAG(检索增强生成)的演变:初级 RAG、高级 RAG 和模块化 RAG 架构

大型语言模型&#xff08;LLMs&#xff09;通过在自然语言任务及其它领域的成功应用&#xff0c;如 ChatGPT、Bard、Claude 等所示&#xff0c;已经彻底改变了 AI 领域。这些 LLMs 能够生成从创意写作到复杂代码的文本。然而&#xff0c;LLMs 面临着幻觉、过时知识和不透明、无…

磁力搜索器,解读新一代的搜索引擎方式,磁力王、磁力猫等引擎的异同及原理

最近国内几年&#xff0c;不依赖追踪服务器的磁力搜索开始流行&#xff0c;成为新的资源搜索的方式。 我们平常所说的磁力王&#xff08;jigecili.com)、磁力猫(yinghuacili.com)、bt磁力&#xff08;btcili.cn)、磁力狗最新版&#xff08;cilizhai.net)、磁力兔子、磁力宝、人…

基于ChatGPT的大型语言模型试用心得

近年来&#xff0c;ChatGPT这样的大型语言模型&#xff0c;它如同一颗冉冉升起的新星&#xff0c;迅速在商业、教育、娱乐等多个领域照亮了创新的天空&#xff0c;极大地革新了我们的工作与日常生活。 最近我发现一些国内用户也能自由访问的中文ChatGPT APP。这个平台不仅提供…

计算机网络知识点(五)

目录 一、简述什么是 MSL&#xff0c;为什么客户端连接要等待2MSL的时间才能完全关闭 二、简述 SYN flood&#xff0c;如何防止这类攻击 三、简述TCP 粘包和拆包 四、简述TCP 与 UDP 在网络协议中的哪一层&#xff0c;他们之间有什么区别&#xff1f; 五、简述从系统层面上…

个人制作软件是否需要代码签名证书?

在数字化时代&#xff0c;软件安全已成为企业和个人用户关注的焦点。为了保护软件免受恶意篡改和仿冒&#xff0c;代码签名证书应运而生。代码签名证书是一种数字证书&#xff0c;用于对软件进行数字签名和加密&#xff0c;以确保软件在传输过程中的安全性和可靠性。本文将详细…

【西瓜书】第一二章笔记

耽于学业&#xff0c;选择速记&#xff0c;后续再补。本笔记质量不高&#xff0c;敬请谅解。 关键词&#xff1a; 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a;一种机器学习范式&#xff0c;其中模型在带有标签的数据集上进行训练。标签提供了正确的答案&…

makefile追加warning日志

在Makefile中&#xff0c;你不能直接“追加”warning日志到构建过程中&#xff0c;但你可以通过几种方式在构建时产生额外的警告或消息。以下是一些常用的方法&#xff1a; 使用echo或printf命令&#xff1a; 在Makefile的规则中&#xff0c;你可以使用echo或printf命令来输出警…

10招教你玩转Python循环优化

更多Python学习内容&#xff1a;ipengtao.com 在Python编程中&#xff0c;循环是最常见的控制结构之一。尽管Python的循环语法简单明了&#xff0c;但在处理大量数据或进行复杂计算时&#xff0c;循环可能会成为性能瓶颈。本文将介绍10种加速Python循环的方法&#xff0c;帮助在…

[Linux] 系统的基本架构特点

Linux系统的基本结构 Linux is also a subversion of UNIX,it follows the basic structure of UNIX 内核(kernel)&#xff1a; 操作系统的基本部分 管理与硬件相关的功能&#xff0c;分模块进行 常驻模块&#xff1a;进程控制IO操作文件\磁盘访问 用户不能直接访问内核 外壳(s…