web自动化测试窗口框架与验证码登录处理

前言

selenium的作用域切换
selenium在处理元素时遇见新窗口、网页嵌套网页、网页的原生弹窗,无法进行直接处理作用域里元素的内容,需要通过切换作用域来处理此类问题。

selenium三种作用域切换:
①、window窗口切换
②、iframe切换
③、alert弹窗切换

window窗口切换

以百度为例,在原百度的网页上,点击超链接后会打开一个新的网页,这个时候如果需要定位新的网页上的元素,就需要切换作用域了。

切换作用域实现方案:

使用driver.window_handles,可以获取全部网页的索引,并且将索引存放于一个数组中,因此可以通过数组取值的方式实现切换网页作用域:

driver.switch_to.window(driver.window_handles[-1])

切换作用域后,原网页上就无法进行元素定位了,可以通过数组下标取值的方式,将作用域切换为原网页:

driver.switch_to.window(driver.window_handles[0])

代码实现:

from selenium import webdriver #打开浏览器 driver = webdriver.Chrome("chromedriver.exe") driver.maximize_window() #打开网页 driver.get("https://www.baidu.com/") driver.find_element_by_link_text("hao123").click() #会跳转一个新的hao123的窗口,此时就无法操作原百度网页的窗口了,因此需要切换作用域 #获取所有网页的索引:driver.window_handles # print(driver.window_handles) #打印出来的值是一个数组:['37554D9C36A0A691571C87C250434881', '860CA08A7CEEB72959449FCB3B75D146'],因此可以通过数组取值的方式实现切换网页作用域 driver.switch_to.window(driver.window_handles[-1]) #把driver切换到最新弹出来的窗口 print(driver.title) #获取当前网页的标题 driver.find_element_by_xpath('//*[@id="search"]/form/div[2]/input').send_keys("csdn")

iframe切换

在某些后台管理系统中,网页中嵌套小网页,这种情况是没有办法直接处理小网页的,大网页的内容是可以直接处理的

识别小网页
怎么查看哪些页面是嵌套小网页的:iframe通常在大网页中是以iframe标签存在的,标签里面也会有html的标签。我们可以通过源代码或者右键空白区域去判断是否存在【重新加载框架选项】:

①源代码查看标签判断:定位元素后,去代码前后找是否有iframe标签,且里面还有html标签

②右键空白区域查看是否存在【重新加载框架选项】判断:

切换作用域
先找到iframe标签的id值,然后定位元素,再使用driver.switch_to.frame()方法切换。相同的道理,切换作用域后,原网页就无法进行元素的定位,可将作用域切换回原网页:driver.switch_to.default_content()

代码实现:

from selenium import webdriver driver = webdriver.Chrome("chromedriver.exe") driver.maximize_window() driver.get("https://passport2.eastmoney.com/pub/login") #作用域从大网页切换到小网页(不同版本的selenium有以下两种写法) driver.switch_to.frame(driver.find_element_by_id('frame_login') ) #frame_login为frame标签的id值 driver.switch_to.frame("frame_login") #输入框的xpath://*[@id="txt_mobile"] driver.find_element_by_xpath('//*[@id="txt_mobile"]').send_keys("110") #把作用域从小网页切换到大网页(不同版本的selenium有以下两种写法) driver.switch_to.default_content() driver.switch_to.parent_frame() #/html/body/div[1]/div/div/h1 e = driver.find_element_by_xpath('/html/body/div[1]/div/div/h1') print(e.text) #能成功打印,说明小网页切换大网页成功了

alert弹窗切换

alert窗口就是js提示框,它是浏览器原声的弹窗,不属于web界面,所以,在有这个提示框的作用下,我们是无法继续web操作的,必须先处理掉js弹窗,才可以继续。

Alert类提供了四个方法来处理弹窗:

driver.switch_to.alert.accept() # 确定操作 driver.switch_to.alert.dismiss() # 取消操作 driver.switch_to.alert.send_keys("") # alert弹框输入文本 driver.switch_to.alert.text() # 获取alert的文本内容

代码实现:

from selenium import webdriver import time #打开浏览器,获得浏览器句柄 driver = webdriver.Chrome("chromedriver.exe") driver.maximize_window() driver.get("http://localhost:8080/selenium/selenium6.html") #xpath:/html/body/a driver.find_element_by_xpath('/html/body/a').click() time.sleep(10) #等待10s查看弹窗关闭效果 driver.switch_to.alert.accept() # 确定操作 driver.switch_to.alert.dismiss() # 取消操作 driver.switch_to.alert.send_keys("") # alert弹框输入文本 driver.switch_to.alert.text() # 获取alert的文本内容

登录验证

在做自动化测试时,有些图形化的验证码很复杂,验证码的作用是为了防止自动化工具,可以有以下几种方式去处理它:

万能码
深度学习
使用cookie绕过登录

服务器验证用户身份的方式有两种:第一种是使用cookie和session的方式;第二种是使用token的方式。

第一种验证方式下,我们可以使用已经登录账号的cookie,来伪造账号已经登录了

cookie理解

比如用户登录了某个网站后,再次刷新这个页面去请求服务器,如果没有相关机制的话,服务器是不知道这个请求是否还是刷新之前登录的用户发出来的。此时,为了维持用户的登录状态,即为了使服务器能够识别页面刷新之后的请求,就可以使用cookie机制。

用户A第一次请求服务器后,服务器会自动生成一个暗号,并将这个暗号的一部分返回给用户A,用户A将其以cookie的方式存起来,下次再次访问的时候,会自动把cookie带上,服务器拿到cookie后将其与自己的进行比对,识别出是用户A(以此类推,不同的用户有不同的暗号),服务器通过这种方式以此来识别各个用户。

为什么要这样做:请求时用的是http协议,http协议有一个特点就是:无状态,即服务器在每次请求时,他不知道谁是谁,为了解决这个问题,就诞生了cookie和session机制。在服务器上以session的形式存在,用户端以cookie的形式存在。

例如用户A已经登录,在服务器上对应的session就会是登录状态,用户A再次请求,服务器就不会让用户A再进行以此登录操作了。所以,cookie绕过登录其实是登录状态保持,而不是真的不需要登录

cookie只是一个暗号,所有的登录记录都是存在session里

使用cookie绕过登录的实现
①第一步:获取已经登录的cookie

from selenium import webdriver import time driver = webdriver.Chrome("chromedriver.exe") driver.maximize_window() driver.get("https://www.bilibili.com/") #第一步:获取已经登录的cookie(手工抓取) time.sleep(60) #等待的时间用于手动登录 print(driver.get_cookies())

②第二步:手动添加已经登录的cookie(在添加之前需要将原有的cookie删掉)

由于Selenium每次启动的浏览器是一个隔离的环境,不能直接使用本地已经保存的Cookies值,我们需要通过driver的add_cookie()方法手动添加Cookies

#第二步:手动添加已经登录的cookie(在添加之前需要将原有的cookie删掉) driver.delete_all_cookies() #下面是刚才获取的cookie,是以数组形式存在的,可遍历添加cookie cookies = [{"xxxxx"}] for cookie in cookies: driver.add_cookie(cookie)

③、第三步:刷新网页

  1. #刷新网页

  2. driver.refresh()

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

探秘AI应用架构师的智能营销AI决策系统数据分析能力

探秘AI应用架构师的智能营销AI决策系统数据分析能力 1. 引入与连接:智能营销的变革与数据分析的核心作用 1.1 开场故事:营销困境与AI破局 场景: 2023年,某快消品牌市场总监李明正面临一个典型的营销困境——公司投入了数百万营销预算,却无法准确追踪哪些渠道带来了实际…

编程语言最核心的方面是什么?

编程语言最核心的区分要素及原理 编程语言的核心区别主要体现在以下几个方面,每个方面都有其独特的机制和原理: 一、核心区分要素 1. 编程范式 这是最根本的区别,决定语言如何组织和表达逻辑。 实例对比: # Python(多范…

rdd的持久化

在Apache Spark中,RDD(弹性分布式数据集)的持久化(Persistence)是一种优化技术,用于将RDD的计算结果存储在内存或磁盘中,避免重复计算。以下是关键要点:核心作用避免重复计算&#x…

[Windows] 局域网共享精灵v2025.11.10绿色版

[Windows] 局域网共享精灵v2025.11.10绿色版 链接:https://pan.xunlei.com/s/VOiI2bKifFbU2d-SbBTjWrfPA1?pwdpsbj# 局域网共享精灵是一款Windows环境下助力于局域网环境文件共享和打印机共享,帮助您快捷高效的在局域网内实现文件共享和打印机共享的操作&#xf…

强烈安利!继续教育必用TOP10 AI论文工具测评

强烈安利!继续教育必用TOP10 AI论文工具测评 2026年继续教育AI论文工具测评:为何需要这份权威榜单 在当前学术研究日益数字化的背景下,继续教育群体面临着前所未有的挑战。无论是撰写高质量论文,还是高效完成科研任务,…

介电强度试验仪解决材料在高压环境下的绝缘性能评估问题

介电强度试验仪主要解决材料在高压环境下的绝缘性能评估问题,具体包括以下几个方面:1. ‌评估材料的绝缘性能‌核心功能‌:通过施加直流或交流电压,模拟高压环境,测试材料在电场作用下的击穿电压,从而评估其…

UTS API插件,助力uniapp开发者快速实现人脸识别活体检测

HelloKitty-FaceAIFaceAI人脸识别,活体检测UTS API插件,支持iOS,Android 双端,助力uniapp开发者快速实现人脸识别活体检测。 后面我们会支持主题色定制等功能,更多可根据原生工程项目修改升级插件原生工程:…

【Linux命令大全】003.文档编辑之nl命令(实操篇)

【Linux命令大全】003.文档编辑之nl命令(实操篇) ✨ 本文为Linux系统文档编辑与文本处理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。 (关注不迷路哈!!&#…

【Linux命令大全】003.文档编辑之od命令(实操篇)

【Linux命令大全】003.文档编辑之od命令(实操篇) ✨ 本文为Linux系统文档编辑与文本处理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。 (关注不迷路哈!!&#…

小迪安全2023-2024|第12天-扩展整理:信息打点-Web应用企业产权指纹识别域名资产网络空间威胁情报_笔记|web安全|渗透测试|网络安全_2023-2024

小迪安全2023-2024|第12天:信息打点-Web应用&企业产权&指纹识别&域名资产&网络空间&威胁情报_笔记|web安全|渗透测试|网络安全_2023-2024 一、信息打点概述 在渗透测试和安全评估中,信息收集是整个…

【用友U8cloud】修改Server和Data Source 访问IP地址

访问路径 C:\U8CloudCERP5.1\U8CERP\bin 运行u8SysConfig配置修改完成后,点击保存 运行启动U8cloud这块启动时间稍微长一些,配置好的电脑可能1-3分钟左右,配置不好的可能更长

ITSM 现代化实践与智能化趋势:从传统运维到数智化服务的演进

摘要如今,IT 服务管理(ITSM)已不再仅仅是 IT 部门的内部流程规范,而是企业构建高效、稳定、可持续服务体系的核心支撑。随着云计算、大模型及自动化技术的爆发,传统的“流程驱动”模式正在向“价值驱动”与“智能驱动”…

小迪安全2023-2024|第10天:基础入门-HTTP数据包Postman构造请求方法请求头修改状_笔记|web安全|渗透测试|网络安全_2023-2024

第10天:基础入门-HTTP数据包&Postman构造&请求方法&请求头修改&状_笔记|web安全|渗透测试|网络安全_2023-2024 一、基础入门 1. 请求与返回过程00:25 基本流程:浏览器发送Request请求到服…

小迪安全2023-2024|第11天:基础入门-ChatGPT篇注册体验结合安全融入技术高效赋能拓_笔记|web安全|渗透测试|网络安全

第11天:基础入门-ChatGPT篇&注册体验&结合安全&融入技术&高效赋能&拓_笔记|web安全|渗透测试|网络安全_2023-2024 一、基础入门—ChatGPT篇&注册体验&结合安全&融入技术00:05 1. Cha…

吐血推荐9个AI论文网站,MBA轻松搞定毕业论文!

吐血推荐9个AI论文网站,MBA轻松搞定毕业论文! AI 工具助力论文写作,轻松应对学术挑战 在当前的学术环境中,MBA 学生面临着越来越高的论文要求,从选题到撰写、修改,每一个环节都充满挑战。而 AI 技术的快速发…

ITSM 运维管理平台:企业数字化转型的核心利器

摘要在数字化转型步入深水区的今天,IT 系统已不再是企业的后台辅助工具,而是支撑业务运转的核心引擎。无论是金融高频交易、制造自动生产线,还是互联网的实时交互,IT 系统的稳定性与响应速度直接决定了企业的竞争力和客户口碑。然…

【Linux命令大全】003.文档编辑之paste命令(实操篇)

【Linux命令大全】003.文档编辑之paste命令(实操篇) ✨ 本文为Linux系统文档编辑与文本处理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。 (关注不迷路哈!!&am…

收藏这份RAG指南,掌握大模型知识增强技术,解决AI知识盲区,打造专属智能问答系统!

RAG技术通过检索外部知识库增强大模型回答能力,解决模型知识时限和空间局限导致的幻觉问题。分为检索(问题向量化与知识库匹配)和生成(结合相关知识提示大模型)两阶段。相比微调,RAG成本更低且更新便捷。实…

DeepSeek辅助编写的计算数独可选数的python程序第3部分

就是增加了批处理在第2个程序的基础上,增加功能函数,读入换行分隔的文本文件,输出行号、原文本、迭代后文本、原已知数、现已知数的csv文件,只给出新增的代码,以及调用的命令行,例如 sudofill.py input.txt…

ToDesk超强更新来了!V4.8.4版本全面进化,远程体验再突破!

在远程控制领域,究竟什么才是真正好用的远程控制?是连接速度更快?是画面更清晰?还是操作更流畅?答案并非唯一;真正的“好用、实用”,是让每一次连接都自然、高效且安心。这一次,ToDe…