Selenium教程__使用execute_script执行JavaScript(11)

news2024/9/30 5:40:57

selenium的包含的方法已能完全满足UI自动化,但是有些时候又不得不用到执行JS的情况,比如在一个富文本框中输入1W个字,使用send_keys方法将经历漫长的输入过程,如果换成使用JS的innerHTML方法就能够很快的完成输入。

selenium执行JavaScript代码的方法有两种:

  1. 执行原生的JS代码
  2. 执行需格式化的JS代码

先简单写个html界面帮助演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <textarea id="kw" cols="30" rows="10"></textarea>
    <input type="text" name="" id="kw1">
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <div id="div">div标签</div>
    <button onclick="alt()" id="btn">按钮</button>
</body>
<script>
    function alt()
    {
        alert("我出来啦!!!");
    };
</script>
</html>

一、执行原生JS代码

这种方法是将所有操作全部交给js代码去实现,包括定位元素以及对元素的操作,因为原生JS定位元素有一定的局限性所以不是所有的元素都能使用该方法。

实现代码如下

from selenium import webdriver
import time

# 创建Chrome实例对象
driver = webdriver.Chrome()
# 打开浏览器并访问百度
driver.get("file:///C:/Users/41850/Desktop/test.html")
# 窗口最大化
driver.maximize_window()
time.sleep(2)

long_str = "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"

# 方法一:执行原生的JS代码
# 例1:向富文本插值
js = f"document.getElementById('kw').innerHTML='{long_str}';"
driver.execute_script(js)
time.sleep(1)

# 例2:向input框插值
js = f'document.getElementById("kw1").value="selenium"'
driver.execute_script(js)
time.sleep(1)

# 例3:滚动浏览器界面至指定元素
js = f"document.getElementById('div').scrollIntoView()"
driver.execute_script(js)
time.sleep(1)

# 例4:点击按钮
js = f'document.getElementById("btn").click()'
driver.execute_script(js)


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

二、先定位元素,再执行JS代码

第二种方法是先使用selenium定位元素,然后使用execute_script方法将传入的参数格式化成JS语句再执行,与第一种方法相比,更易用。

实现代码如下

from selenium import webdriver
import time

# 创建Chrome实例对象
driver = webdriver.Chrome()
# 打开浏览器并访问百度
driver.get("file:///C:/Users/41850/Desktop/test.html")
# 窗口最大化
driver.maximize_window()
time.sleep(2)

long_str = "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超" \
             "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长" \
             "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内" \
             "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容" \
             "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"

# 方法二:执行需格式化的JS代码
# 例1:向富文本插值
el = driver.find_element_by_id("kw")
js = f"arguments[0].innerHTML='{long_str}';"
driver.execute_script(js, el)
time.sleep(1)

# 例2:向input框插值
el = driver.find_element_by_id("kw1")
js = f'arguments[0].value="selenium"'
driver.execute_script(js, el)
time.sleep(1)

# 例3:滚动浏览器界面至指定元素
el = driver.find_element_by_id("div")

js = f"arguments[0].scrollIntoView()"
driver.execute_script(js, el)
time.sleep(1)

# 例4:点击按钮
el = driver.find_element_by_id("btn")
js = f'arguments[0].click()'
driver.execute_script(js, el)


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

事必有法,然后有成- 最后祝大家早日达到测试的天花板!



以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以留言【777】直接拿走就好了

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

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

相关文章

Shell 函数实现Go语言多版本管理轻量级方案

现有的工具方案 https://github.com/moovweb/gvmhttps://github.com/voidint/g 我的方案 优点&#xff1a; 原生&#xff1a;基于 go 语言本身支持多版本的能力实现&#xff0c;可以下载任何官方发布的版本简单&#xff1a;shell 函数实现&#xff0c;直接集成到 bashrc 或…

软件测试技能,JMeter压力测试教程,HTTP Cookie管理器(四)

目录 前言 一、场景案例 二、HTTP Cookie管理器 三、302 重定向 前言 Web网站的请求大部分都有cookies&#xff0c;jmeter的HTTP Cookie管理器可以很好的管理cookies 我用的 jmeter5.1 版本&#xff0c;直接加一个HTTP Cookie管理器放到请求的最前面&#xff0c;就可以自…

用docker搭建selenium grid分布式环境实践

目录 前言&#xff1a; selenium jar包直接启动节点 用docker命令直接启动 docker-compose 启动 Hub和node在一台机器上 Hub和node不在一台机器上 遗留问题 总结 前言&#xff1a; Selenium是一个流行的自动化测试工具&#xff0c;支持多种编程语言和多种浏览器。Sele…

【微服务架构演进】一文读懂单片到微服务架构的模式和最佳实践

在本文中&#xff0c;我们将学习如何使用设计模式、原则和最佳实践来设计微服务架构。我们将使用正确的架构设计模式和技术。 在本文结束时&#xff0c;您将了解如何在微服务分布式架构上设计系统以实现高可用性、高可扩展性、低延迟和对网络故障的弹性&#xff0c;从而处理数百…

学习Spring之声明式事务

什么是事务&#xff1f; 一个业务有一组操作&#xff0c;要么都成功&#xff0c;要么都失败 事务的四大特性&#xff1a;ACID A 原子性&#xff1a;一组操作&#xff0c;要么都成功&#xff0c;要么都失败 C 一致性 &#xff1a;事务的前后要保证事务的一致性 I 隔离性 &…

QLabel的使用

QLabel介绍 QLabel 是 Qt 框架中的一个控件类&#xff0c;用于显示文本或图像。它可以在窗口或其他容器中显示静态文本&#xff0c;并且可以根据需要设置格式、对齐方式和尺寸。 主要作用如下&#xff1a; 显示文本内容&#xff1a;QLabel 可以显示文字内容&#xff0c;可以…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Spring Boot 中使用 @EventListener 注解监听事件

Spring Boot 中使用 EventListener 注解监听事件 Spring Boot 是一个流行的 Java Web 框架&#xff0c;它提供了丰富的功能和工具来简化开发人员的工作。其中一个非常有用的功能是事件监听器。在 Spring Boot 中&#xff0c;我们可以使用 EventListener 注解来监听事件&#x…

一天时间完成Python入坑(开发环境搭建、excel解析、exe打包三步走)

0.为什么要入坑Python 早就知道Python好&#xff0c;Python妙&#xff0c;Python用起来呱呱叫。工作上一直没有什么用得上Python的必要性&#xff0c;就一直没有接触&#xff0c;本次终于来了机会&#xff1a;【图新地球桌面端要对外开放Python API】&#xff0c;开放图新地球的…

【mars3d】Cesium实现雷达放射波

Cesium实现雷达放射波 1、雷达放射波 先看效果图 说明&#xff1a;使用的是mars3d框架&#xff0c;原生的Cesium实现方式可以绕道~ 实现方式&#xff1a; <template><div id"mars3dContainer"></div> </template><script setup> i…

Fiddler抓包基础使用

目录 一、设置抓谷歌浏览器https数据包 1、选中以下选项即可 2、若是选中后还是未抓到HTTPS数据包&#xff0c;则可进行以下操作 二、设置抓取Firefox浏览器HTTPS数据包 1、Firefox的代理需设置系统代理&#xff0c;设置→高级→网络设置&#xff0c;设置为系统代理&#…

【深度学习】5-3 与学习相关的技巧 - Batch Normalization

如果为了使各层拥有适当的广度&#xff0c;“强制性”地调整激活值的分布会怎样呢&#xff1f;实际上&#xff0c;Batch Normalization 方法就是基于这个想法而产生的 为什么Batch Norm这么惹人注目呢?因为Batch Norm有以下优点&#xff1a; 可以使学习快速进行(可以增大学习…

广工赢清华,炸裂!

去年2022年广工对阵清华&#xff0c;我在知乎写了文章 清华赢球靠的是广东第一高中生邹阳和2022届CBA状元王岚嵚。 比分焦灼的第四节关键时刻&#xff0c;邹阳在左角底线持球高高举起篮球&#xff0c;那个球的弧度非常高&#xff0c;皮球以稳稳的抛物线弧度掉入篮筐。 之后&…

Python基础(21)——Python函数实战、递归、lambda、高阶函数

Python基础&#xff08;21&#xff09;——Python函数实战、递归、lambda、高阶函数 文章目录 Python基础&#xff08;21&#xff09;——Python函数实战、递归、lambda、高阶函数目标一. 应用&#xff1a;学员管理系统1.1 系统简介1.2 步骤分析1.3 需求实现1.3.1 显示功能界面…

Streamlit基础教程

streamlit是什么 streamlit是一个开源的python库&#xff0c;它能够快速的帮助我们创建定制化的web应用&#xff0c;而且还非常便于和他人分享&#xff0c;特别是在机器学习和数据科学领域。整个过程不需要你了解任何前端的知识&#xff0c;包括html、css、javascript等&#x…

Vue3 计算属性和侦听器实战(computed、watch)——简易点餐页面

文章目录 &#x1f4cb;前言&#x1f3af;项目介绍&#x1f3af;项目创建&#x1f3af;代码分析&#x1f3af;完整代码&#xff08;含 CSS 代码&#xff09;&#x1f4dd;最后 &#x1f4cb;前言 这篇文章记录一下 Vue3 计算属性和侦听器 &#xff08;computed、watch&#xf…

网络安全自学能学会吗?网络安全如何学习

网络安全是近年来的热门工作&#xff0c;吸引了许多小伙伴开始学习网络安全知识。那么我们应该如何学习网络安全呢&#xff1f;这是一个很多人都在考虑的问题。网络安全可以自学吗&#xff1f;自学网络安全能不能学会&#xff1f; 无论什么知识都是自学的&#xff0c;只是说每…

数学物理学家心中的十大最美方程

“你认为最美的数学、物理方程是什么&#xff1f;”当代十位大数学家、物理学家给出了他们自己的回答。这些回答构成了大雅之美&#xff08;The Concinitas Project&#xff09;的十篇文章。我们为读者带来这些大师对自己眼中最美方程的精彩解读。 1.指标定理 撰文 阿蒂亚爵士…

机器翻译与自动文摘评价指标 BLEU 和 ROUGE

机器翻译与自动文摘评价指标 BLEU 和 ROUGE 在机器翻译任务中&#xff0c;BLEU 和 ROUGE 是两个常用的评价指标&#xff0c;BLEU 根据精确率(Precision)衡量翻译的质量&#xff0c;而 ROUGE 根据召回率(Recall)衡量翻译的质量。 1.机器翻译评价指标 使用机器学习的方法生成文…

安科瑞AWT100无线数据采集通信终端

安科瑞AWT100无线数据采集通信终端 安科瑞 崔丽洁