【第06节】Selenium4 JavaScript 处理场景实战(Python Web自动化测试)

news2025/4/5 5:27:46

Selenium 4 【01-06节】主讲元素定位,处理一些特殊场景的方法与实战已经全部写完。文章所有素材来自互联网,如果文章有侵权处,请联系作者。

文章目录

  • 1、Selenium4 自动化 JavaScript 场景实战
    • 1.1 使用 JavaScript 处理富文本
    • 1.2 使用 JavaScript 处理隐藏元素
    • 1.3 使用 JavaScript 处理 readonly 属性
    • 1.4 使用 JavaScript 处理浏览器滚动条

1、Selenium4 自动化 JavaScript 场景实战

JavaScript 在自动化测试常见的实战场景,如:处理富文本、 处理隐藏元素、处理 readonly 属性、处理浏览器滚动条。

1.1 使用 JavaScript 处理富文本

处理富文本有很多方式,这里使用的JavaScript 处理,可以用元素定位输入内容也可以,这里不做说明,如果不会就请把以前的代码再看看,举一反三自己写写代码研究一下。

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://demo.zentao.net/story-create-6.html")
driver.find_element(By.ID, 'submit').click()
# 定位富文本框
sleep(2)
# 点击富文本输入框
driver.find_element(By.CLASS_NAME,'ke-edit-iframe').click()
# 输入内容
driver.execute_script('document.getElementsByClassName("ke-edit-iframe")[0].contentWindow.document.body.innerHTML="%s"' % ("故事描述	内容!"))
sleep(2)
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

注意:getElementsByClassName 使用定位必须加序号,因为它返回值是 list ,如果有 getElementsById 定位请用 ID 定位。

1.2 使用 JavaScript 处理隐藏元素

素材太难找了! style="display: block” 是显示,我们通过代码改成不显示,然后再取值设置可见吧。

在这里插入图片描述

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://mail.163.com/register/index.htm?from=163mail&utm_source=163mail")
sleep(1)
# 设置元素为隐藏
driver.execute_script('document.getElementsByClassName("select")[0].style.display="none";')
sleep(2)
# 设置元素为可见
driver.execute_script('document.getElementsByClassName("select")[0].style.display="block";')
sleep(2)

# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

1.3 使用 JavaScript 处理 readonly 属性

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://kyfw.12306.cn/otn/leftTicket/init")
driver.find_element(By.ID, 'qd_closeDefaultWarningWindowDialog_id').click()
# 移除 readonly 属性
cf = 'document.getElementById("train_date").removeAttribute("readonly")'
driver.execute_script(cf)
sleep(2)
driver.find_element(By.ID, 'train_date').clear()
driver.find_element(By.ID, 'train_date').send_keys("8888-88-88")

# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

1.4 使用 JavaScript 处理浏览器滚动条

from selenium import webdriver
from time import sleep

from selenium.webdriver import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("(Python Web自动化测试)")
driver.find_element(By.ID, "su").click()
sleep(2)
# 使用滚动条移到页面底部
driver.execute_script("window.scrollTo(0,10000);")
sleep(3)
# 使用滚动条移到页面顶部
driver.execute_script("window.scrollTo(10000,0);")
sleep(2)
"""
这一段代码是,清除上面的数据,重新搜索数据。
"""
driver.find_element(By.ID, "kw").clear()
driver.find_element(By.ID, "kw").send_keys("零基础学Selenium 4")
driver.find_element(By.ID, "su").click()
sleep(2)
# 使用 元素定位 + Keys.DOWN 将滚动条移动到底部
driver.find_element(By.XPATH, '//*[@id="page"]/div/a[10]').send_keys(Keys.DOWN)
sleep(3)
# 使用 元素定位 + Keys.UP 将滚动条移动到顶部
driver.find_element(By.XPATH, '//*[@id="s_tab"]/div/a[9]').send_keys(Keys.UP)
sleep(2)
# driver.close()关闭驱动,driver.quit()退出驱动,开发中一般建议使用driver.quit()
driver.quit()

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

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

相关文章

Linux——网络编程总结性学习

什么是ISP? 网络业务提供商_百度百科 计算机网络有哪些分类方式,计算机网络有哪些分类?_陈泽杜的博客-CSDN博客 路由器_百度百科 目前实际的网络分层是TCP/IP四层协议 当我们浏览⽹站找到想要下载的⽂件以后,找到相应的接⼝点击下载就好了。…

新形势下安全风险评估实践

​ 随着安全内涵的不断扩充和发展,风险评估作为安全管理的重点,内容以及方法都与时俱进的得到了发展和丰富,本文将介绍新形势下风险评估的特点和实践心得,以供参考。 一、新形势下安全风险评估特点 首先是内外部形势和要求的变…

Docker入门教程(详细)

目录 一、Docker概述 1.1 Docker 为什么出现? 1.2 Dorker历史 1.3 能做什么 虚拟机技术:(通过 软件 模拟的具有完整 硬件 系统功能的、运行在一个完全 隔离 环境中的完整 计算机系统) 容器化技术:(容…

【JAVA高级】——玩转JDBC中的三层架构

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分…

Oracle SQL执行计划操作(8)——视图与集合相关操作

8. 视图相关操作 该类操作与包含视图的SQL语句相关。当SQL语句被硬解析时,如果SQL语句中的视图未被合并,则根据不同的具体场景,如下各操作可能会出现于相关SQL语句的执行计划。 1)VIEW 创建数据的一个中间视图,一般分为系统视图和用户视图。优化器在为SQL语句生成执行计…

iOS上架流程详细版本

苹果上架审核周期长一直是困扰用户的一大问题,这次把我自己上架的经历分享给大家,避免大家入坑。 上架总流程: 创建开发者账号 借助辅助工具appuploader创建证书,描述文件 iTunes connect创建App 打包IPA上传App Store等待审…

Kubernetes(k8s)CNI(flannel)网络模型原理

一、概述 Kubernetes 采用的是基于扁平地址空间的、非NAT的网络模型,每个Pod有自己唯一的IP地址。网络是由CNI(container network interface)插件建立的,而非K8S本身。 二、常见的几种CNI插件介绍 为了使容器之间的通信更加方便,Google 和 Co…

计算机网络面试大总结

本文分文五大部分,第一部分总纲说明计算机网络层次划分的三种模型,一到四部分以TCP/IP协议模型作为划分标准,分别说明各层作用和最常见的面试题,最后总结网络综合面试题,历时六天全文一千字。 其他经典面试题参考程序员…

虹科校园大使招募令

虹科校园大使招募令 我们正式邀请你成为虹科校内明星代言人! 近距离接触技术大牛工作领域 来自人力总监的职业发展指导 官方校园大使认证证书 走内部通道提前斩获校招offer 你将成为 校园品牌首席推广师 赋予你自主“DIY”的权利,与校招负责人一起…

损失函数——机器学习

目录 一、实验内容 二、实验过程 1、算法思想 2、算法原理 3、算法分析 三、源程序代码 四、运行结果分析 五、实验总结 一、实验内容 理解损失函数的基本概念;理解并掌握均方差损失函数的原理,算法实现及代码测试分析;理解并掌握交叉…

【linux】linux实操篇之权限管理

14天学习训练营导师课程: 互联网老辛《 符合学习规律的超详细linux实战快速入门》 目录前言权限的基本介绍rwx权限详解更改文件属性1、chgrp:更改文件属组2、chown:更改文件属主,也可以同时更改文件属组3、chmod:更改文…

帷幄前沿茶话丨如何发起一场直播间运营变革?

打开抖音,各种各样的带货模式都有。吃播的、喊麦的、跳舞的、说相声的,各种表现形式都可以是带货的手段。 但实际效果如何复盘?一旦感性的带货模式回归到理性分析,问题就没那么简单了。 电商的关键衡量指标是 GMV。直播带货中&…

[附源码]java毕业设计学院竞赛管理信息系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

RabbitMQ【基本使用】

目录 消息队列 1. Message queue 释义 1.1 问题思考 ? 1.2 存在问题 1.3 优化方案 1.4 案例分析 1.5 带来的好处 1.6 消息队列特点 1.7 Email邮件案例分析 2. 消息队列相关 2.1 AMQP 3. Docker安装部署RabbitMQ 4. springboot连接配置 4.1 RabbitMQ 配置账号…

Unity记录

第四课:组件 自定义组件,主要是 编写 脚本 脚本:要求必须 挂载 到游戏物体上,才能使用 主要组件: (1)gameObject 游戏对象 VS中的显示 总结: //属性 name:名称 tag : 标签名称 ac…

Execution failed for task ‘:app:javaPreCompileDebug‘.

debug运行app到模拟器的时候,一直报错,然后百度了下,给出的答案是: android { defaultConfig { //添加如下配置就OK了 javaCompileOptions { annotationProcessorOptions { includeCompileClasspath true } } } 但是加了之后&am…

[附源码]java毕业设计养老护理综合服务系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

个人养老金真的要来了,详解人社部、财政部、税务局、银保监会和证监会联合发布的《个人养老金实施办法》(要点概览+示意图+逐条解读)

11月5日,人力资源社会保障部、财政部、国家税务总局、银保监会、证监会联合发布了《个人养老金实施办法》。(人社部发〔2022〕70号) 11月18日,中国银保监会发布了《商业银行和理财公司个人养老金业务管理暂行办法》。(…

将一个硬盘空间分配给另一个硬盘,怎么把一个磁盘的空间给另一个磁盘

用户在管理电脑磁盘分区的时候,为了更好地利用磁盘分区,需要对磁盘分区进行调整,如果涉及到磁盘分区调整,将一个硬盘空间分配给另一个硬盘?那么,在本文中,易我小编将介绍电脑磁盘分区调整的知识…

【Linux】线程池

文章目录1.线程池概念2.线程池的优点3.线程池的应用场景4.线程池的实现5.STL和智能指针和线程安全5.1其他常见锁5.2读写锁1.线程池概念 线程池是一种线程使用模式。 线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线 程,等待…