全网最详细,web自动化测试窗口框架与验证码登录处理(超详细实战)

news2024/11/15 7:31:25

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

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

Selenium4自动化测试:https://www.bilibili.com/video/BV1MS4y1W79K/

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)

③、第三步:刷新网页

#刷新网页
driver.refresh() 
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有不断拼搏,才能摆脱平庸。只有奋斗不息,才能迎来辉煌。愿你不畏艰难,不惧逆境,不停前行,圆梦无限!

不放弃,不言败,奋斗的人生最精彩!每一次跌倒都是成长的历练,每一次坚持都是追逐梦想的勇气。鼓起勇气,向着未来奋力前行!

天行健,君子自强不息。拼搏奋斗,是我们生命中最重要的一部分。愿每一个坚定向前的人都能勇往直前,创造属于自己的辉煌!

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

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

相关文章

传输协议特点大比拼之TCP

文章目录 前言一.Tpc报头格式源端口和目的端口:序列号:确认号:数据偏移:控制位:窗口大小:校验和:紧急指针: 二.TPC原理2.1 确认应答机制2.2 超时重传机制2.3 连接管理机制2.3.1 三次…

档案室温湿度相关资料

国家档案局《档案库房技术管理暂行规定》对档案库房(也适用于机关档案室)温湿度要求做了如下明确界定:档案库房(含胶片室、磁带室)的温度应控制在14~24℃,有设备的库房日变化幅度不超过2℃,相对湿度应控制在45~60%&…

【大数据离线开发】9 Pig:数据分析引擎

文章目录 Pig:数据分析引擎9.1 什么是Pig9.1.1 简介9.1.2 与 Hive 的对比 9.2 Pig的体系结构和数据模型9.3 Pig的安装和工作模式9.3.1 Pig安装9.3.2 Pig工作模式 9.4 Pig的内置函数9.5 使用PigLatin语句分析数据9.6 Pig的自定义函数9.6.1 自定义过滤和运算函数9.6.2…

低资源环境下对风湿性心脏病的综合预测

文章目录 Ensembled Prediction of Rheumatic Heart Disease from Ungated Doppler Echocardiography Acquired in Low-Resource Settings摘要方法Echocardiogram Homogenization风湿性心脏病的检测 Ensembled Prediction of Rheumatic Heart Disease from Ungated Doppler Ech…

17、Logos使用摘要

本篇将讲述如何将WX的设置界面添加两个自定义的UI行: 包含是否启用某功能的开关,以及手速设置.并且如何定位到修改的代码.采用的是砸过壳的包. 成品也就是增加了两个UI及开关联动效果、 界面分析 如果我们要破解别人的App, 首先从界面UI入手,定位UI 1、使用class-dump导出全部…

分子共价对接(Covalent Docking)

共价对接(Covalent Docking) 随着人们对共价抑制剂的发现越来越重视,越来越多的软件开始支持共价抑制的虚拟筛选。常用的共价对接软件有CovDock,AutoDock4,FITTED,GOLD,ICM-Pro与MOE等。共价抑制…

断网了,还能ping通 127.0.0.1 吗?为什么?

你女神爱不爱你,你问她,她可能不会告诉你。 但网通不通,你 ping 一下就知道了。 可能看到标题,你就知道答案了,但是你了解背后的原因吗?那如果把 127.0.0.1 换成 0.0.0.0 或 localhost 会怎么样呢&#x…

易基因:ChIP-seq等揭示热休克转录因子A1b调控植物高温胁迫响应的分子机制|应激反应

在拟南芥中,热休克转录因子A1b(HEAT SHOCK TRANSCRIPTION FACTORA1b,HSFA1b)通过影响种子产量来调控对环境胁迫的抗性。HSFA1b是生殖适应性的决定性因素,这种调控机制怎么形成的呢? 2018年,英国…

基于静态分析结果的测试用例自动生成方法

自动生成用例的方法有多种,主要包括随机法、遗传算法、等价类划分法、约束求解法等。各种方法的适用范围、性能及生成的用例质量各不相同,具体见表1。从表1可以看出,约束求解法效率高,生成的用例质量也高,所以本项目中…

RabbitMQ-Topic(主题模式)

Topic topics 模式支持模糊匹配RoutingKey,就像是sql中的 like子句模糊查询,而路由模式等同于sql中的where子句等值查询 topic 交换机背后的路由算法类似于 direct 交换,使用特定路由键发送的消息将被传递到使用匹配绑定键绑定的所有队列。…

期权价格上下限与期权平价关系

目录 1. 期权的基本概念 2. 期权的上下限 3. 期权的平价关系 1. 期权的基本概念 期权:是一种选择权,期权买方向卖方支付一定数额的 期权费 后,可获得在 一定时间(到期日)内以 一定价格(执行价格&#x…

如何使用 Java 将 JSON 文件读取为字符串?这三种方法很管用!

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它可以用来存储和传输结构化的数据。在 Java 中,有多种方法可以将 JSON 文件读取为字符串,本文将介绍其中的几种。 方法一:使用 java.io 包中的类 java.io 包中提…

【MySQL】索引和事务的详细介绍

目录 一.索引 1.索引概念 2.查看索引 3.创建索引 4.索引使用的数据结构是什么 1.HASH(不是) 2.二叉搜索树(不是) 3.B树 N叉数(不是) 4.B树(是滴) 5.组合索引 6.索引覆盖 7…

Docker Compose与Docker Swarm的简介和区别,以及docker swarm的简单使用命令

Docker Compose与Docker Swarm的简介和区别 背景Compose 简介Swarm 简介Compose 和 Swarm区别docker swarm简单使用及常用命令背景:初始化集群节点加入启动docker程序,nginx服务1.22版本查看服务服务伸缩删除service服务创建密钥secret查看secret使用sec…

清徐乡村e镇助力醋企惊艳亮相全国糖酒会

陈醋香醇悠悠,美味酸爽袭人。4月12日至14日,第108届全国糖酒商品交易会在成都举行,其间启动“山西老陈醋专业镇成都行”,208家山西醋企首次集中亮相交易会,为山西醋代言,由阿里云创新中心运营的清徐乡村e镇…

操作系统概述和体系结构

操作系统的概念和功能 核心:作为系统资源的管理者 向上提供方便易用的服务 联机就好比问一句答一句;脱机就好比先问好多句然后统一依次回答。 上面是直接提供给用户使用的。 另外还有一种程序接口: 这就是程序员在编程时经常调用的各种函数接…

【Linux】3、Linux 的编辑器

目录 一、vi 和 vim二、vim(vi)的三种工作模式(1) 命令模式快捷键(2) 底线命令模式操作 一、vi 和 vim 🔖 vim 和 vi 是 Linux 中经典的文本编辑器 🔖 vim 是 vi 的加强版 🔖 vim: ① 兼容 vi 的全部指令…

(数字图像处理MATLAB+Python)第五章图像增强-第六节:其他图像增强技术

文章目录 一:基于对数图像处理模型的图像增强(1)对数图像处理模型(LIP)(2)基于对数图像处理模型的增强 二:图像去雾增强(1)图像去雾模型(2&#x…

Flutter 布局探索 | 如何分析尺寸和约束

theme: cyanosis 前言 本文来分享一下,通过查看源码和布局信息解决的一个实际中的布局小问题,也希望通过本文的分享,当你遇到布局问题时,可以靠自己的脑子和双手解决问题。 如下所示,将 TextField 作为 AppBar 组件的 …

java版本工程项目管理系统平台源码,助力工程企业实现数字化管理

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…