自动化测试——处理场景自动化测试场景详细,跟着上高速

news2024/12/23 7:00:50

目录:导读

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


前言

1、定位一组对象

webdriver使用find_element方法定位一个特定的对象,不过我们有时需定位一组对象,webdriver同样提供了定位一组元素的方法叫find_elements。
定位一组对象一般用于以下场景:

批量操作对象,比如将页面上的checkbox都勾选上。
先获取一组对象,再在这组对象中过滤需要具体定位的一些对象。

举例:使用tag_name定位一组指定页面上的checkbox

filepath = 'file:' + os.path.abspath('checkbox.html')
driver.get(filepath)
inputs = driver.find_elements_by_tag_name("input")
for input in inputs:
	if input.get_attribute('type')=='checkbox':
		  input.click()

2、层级定位

在实际的项目测试中,经常会遇到无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。

层级定位的思想是先定位父对象,然后再从父对象中精确定位出其我们需要选取的后代元素。

语法举例:

driver.find_element_by_id('***').find_element_by_link_text('***')

3、定位frame中的对象

在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B。

switch_to_frame方法可以把当前定位的主题切换到frame里,在frame里实际是嵌套了另外一个页面,而webdriver每次只能在一个页面识别,所以需要用switch_to_frame方法去获取frame中嵌套的页面。

举例:

driver.switch_to.frame('frame1') #移动到id为frame1的frame上
print driver.find_element_by_css_selector("#div1").text

driver.switch_to.default_content() #将识别的主体切换出frame
print driver.find_element_by_css_selector("#id1").text

备注:
switch_to.frame的参数必须是id或者是name,所以一个frame只要有id和name处理起来很容易。
如果没有的话,两种解决思路:
让开发加上id或者name;
使用xpath等方式定位然后实现跳转;

4、浏览器多窗口处理

有时候我们在测试一个web应用的时候会出现多个浏览器窗口的情况,webdriver提供了相应的解决方案。

如下:
首先要获得每一个窗口的唯一标识符号(句柄),通过获得的句柄来区分不同的窗口,从而对不同窗口上的元素进行操作。

举例:

nowhandle=driver.current_window_handle #获取当前窗口句柄
driver.find_element_by_css_selector('a.pass-reglink').click()
time.sleep(2)

allhands = driver.window_handles #获取所有窗口的句柄
for hands in allhands:
if hands != nowhandle:
driver.switch_to_window(hands) #通过句柄跳转窗口

driver.find_element_by_name("account").send_keys("123456") driver.close() #关闭新打开的窗口
driver.switch_to_window(nowhandle) #回到之前的窗口
driver.find_element_by_css_selector("a.close-btn").click()

5、alert/confirm/prompt处理

WebDriver中处理原生JS的 alert confirm 以及prompt非常方便。
具体思路是使用switchTo.alert()方法定位到当前的alert/confirm/prompt(这里注意当前页面只能同时含有一个控件,如果多了会报错的,所以这就需要一一处理了)

然后在调用Alert的方法进行操作,Alert提供了以下几个方法:

text:返回alert/confirm/prompt中的文字内容
accept:点击确认按钮
dismiss:点击取消按钮如果有取消按钮的话
sendKeys:向prompt中输入文字

举例:

driver.find_element_by_id("alert").click()
time.sleep(3)

driver.switch_to_alert().accept()
driver.find_element_by_id("confirm").click()
time.sleep(3)

driver.switch_to_alert().dismiss()
driver.find_element_by_id("prompt").click()
time.sleep(3)

driver.switch_to_alert().send_keys("123456")
time.sleep(3)
driver.switch_to_alert().accept()

备注:send_keys这个方法在chromedriver中输入后不会显示。

6、下拉框处理

web页面上经常会有下拉框,对下拉框的处理比较简单,一般分为两种情况:

下拉框通过元素定位识别,举例:

driver.find_element(By.XPATH,'//option[@value="mango"]').click()

上面的元素为下拉框中的选项。

创建一个select的对象,然后通过相应方法处理,举例:

selectElement = driver.find_element(By.XPATH,'//select[@id="Selector"]')
s = Select(selectElement)
s.select_by_index(2)    #索引定位,索引从0开始
time.sleep(2)
s.select_by_value("mango")    #value属性的值
time.sleep(2)
s.select_by_visible_text("桔子")    #可见文本内容

7、调用javascript

当webdriver遇到无法完成的操作时候,这个时候可以使用javascript来完成,webdriver提供了execute_script()接口来调用js代码。

执行js有两种场景:
一种是在页面上直接执行js
另一种是在某个已经定位的元素上执行js

简单实例:

driver.execute_script('alert("hello!!"); ') #弹出窗口
driver.execute_script("arguments[0].style.border='5px solid red'",wl) #加边框
js = "var user_input = document.getElementById('su').getAttribute('id');return user_input;"
driver.execute_script(js) #识别并获取对象属性
driver.execute_script("var q=document.body.scrollTop=10000

8、cookie处理

假如我们需要验证浏览器中是否存在cookie,因为基于真实的cookie是无法通过白盒和集成测试完成的,webdriver可以读取、添加和删除cookie信息webdriver操作cookie的方法如下:

get_cookies():获取所有cookie信息
get_cookie(name):返回特定name有cookie信息
add_cookie(cookie_dict):添加cookie,必须有name和value值
delete_cookie(name):删除特定部分的cookie信息
delete_all_cookies():删除所有cookie信息

举例:
获取所有cookie并打印

driver.get("http://www.youdao.com")
for cookie in driver.get_cookies():
	print "%s -> %s" % (cookie['name'],cookie['value'])
	
#添加cookie举例
driver.add_cookie({'name':'key-aaaaa','value':'value-bbbb'})
driver.delete_cookie("key-aaaaa")    #删除cookie

9、验证码处理

对于web应用,很多地方比如登录、发帖都需要输入验证码,类型也多种多样。

解决验证码的方法如下:
去掉验证码:在测试环境去掉,对于开发来说屏蔽相关验证码代码;
设置万能码:只要用户输入这个万能码,程序就认为验证通过;
验证码识别技术:可以通过python-tesseract来识别图片验证码,pythontesseract是光学字符识别Tesseract OCR引擎的Python封装类。不过不能达到100%识别

举例:

from PIL import Image
from pytesseract import pytesseract
img=Image.open(r'c:\index3.png')
a=pytesseract.image_to_string(img)
print a

记录cookie:通过向浏览器添加cookie可以绕过登录的验证码,在用户登录之前,通过add_cookie()方法讲用户名和密码写入cookie,使用该方法最大难点是如何或者用户名和密码的name,可以通过get_cookies()或者询问开发解决此问题。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

一切皆有可能,只要你肯去追求。不要害怕失败,因为它是通往成功的必经之路。坚持自己的梦想,即使路途再远、再艰辛,也要勇往直前。每个人都可以成为自己生命中的英雄,只需要敢于挑战和超越自己。

只有付出,才有收获;只有坚持,才能成功。无论遇到多少困难和挫折,都不要放弃前行的脚步。相信自己的梦想,朝着目标勇往直前,每一步都是距离成功更近一步。加油!

永不放弃,只要坚持努力,就一定会有成功的机会等待着你。无论遇到多少困难和挑战,都要勇敢前行,相信自己的能力与潜力,用心去追求自己的梦想,不断超越自我,让生命在奋斗中绽放出最耀眼的光芒!

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

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

相关文章

城市消防应急通信三级作战网构建

项目背景 随着我国《消防信息化“十三五”总体规划》对消防信息化的发展规划做了统一部署,以城市为代表的消防通信成为专网通信行业重点关注的领域之一。目前,我国城市化发展面临高层建筑林立、地铁、人防工程分布密集,大型综合体不断涌现&a…

【运维】服务器系统安装 -- 服务器版

目录 一、环境 二、ubuntu 三、启动u盘制作 Stage 1:下载balena,制作U盘启动工具 Stage 2:下载Ubuntu 系统镜像(参考上一节:Ubuntu 22.04.2 LTS ) Stage 3:将镜像写入到U盘 四、设置开启…

FUZZ工具—Boofuzz框架实际使用

接着上一篇文章FUZZ工具—Boofuzz框架来对框架进行实际的使用; 官方提供了很多案例模板,且网上关于boofuzz的使用介绍很多,也比较成熟,在各个领域都有,可以通过官方提供的案例也看得出来,然后覆盖的面也非常…

西门子变频器G120XA的快速调试方法分享

以西门子变频器G120XA为例,接着为大家介绍一下G120X和G120XA系列变频器的快速调试方法。 西门子发布的Sinamics G120X和G120XA系列变频器,专为风机和泵的应用而设计,实现高效节能、可靠稳定和简单易用。以G120XA为例,通过下面的调…

locust学习教程(9)- event 事件

目录 1、对请求的测试前置、后置处理 2、在web界面添加新内容 3、监听测试的失败率或阀值 4、汇总总结 ​🎁更多干货 1、对请求的测试前置、后置处理 请求有一个上下文参数,通过数据有关的请求(之类的用户名,标签等&#xff…

双路高速 DA 实验

目录 双路高速 DA 实验 1、简介 2、实验任务 3、程序设计 3.1、hs_dual_da顶层模块代码 3.2、ROM 波形存储模块(rom_1024x10b) 创建单端口 ROM IP核 3.2、DA 数据发送模块(da_wave_send)代码 4、硬件设计 4.1、添加.xdc…

MongoDB数据库安装

MongoDB数据库 MongoDB数据的特点: 面相文档存储的分布式数据库 具有很强的扩展性 支持丰富的查询表达式,很接近于关系性数据库 使用类似于json的结构保存数据,可以轻易的查询到文档中内嵌的对象及数组 下载安装包 首先去官网下载安装…

用JAVA写一个下载器第2集

文章目录 一、开发环境及工具二、包名概览三、项目结构四、使用步骤1.编写代码Constant.java:Downloader.javaDownloaderTask.javaDownloadInfoThread.javaFileUtils.javaHttpUtils.javaLogUtils.javaMain.java 2.运行程序 总结 一、开发环境及工具 开发环境及工具…

如果开发说这不是Bug,你会怎么处理?

在项目过程中,如果开发说这个不是Bug,你的第一反应是什么? 不同的人有不同的处理方式,也许是如下几点:相信开发说的,开发说什么就是什么,问题关闭;自己不能决定,啥都上升…

GP232RNL——USB到UART桥接控制器

GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口。GP232RNL包括一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整的调制解调器控制信号的异…

日撸java三百行day69-70

文章目录 说明day69-70 矩阵分界1.基于矩阵分解的推荐系统(Funk-SVD算法)2.随机梯度下降(SGD)2.1 导数2.2 偏导数2.3 方向导数2.4 梯度2.5 随机梯度下降,与损失函数之间的关系 3.代码理解3.1 train() 方法3.2 mae方法&…

神经网络原理(2)

斯坦福大学的印度学生、机器学习爱好者 PararthShah 在2012年12月22日的使用买芒果的例子解释了神经网络,简单来说就是:如果你需要选芒果,但不知道什么样的芒果最好吃,一个简单粗暴的方法是尝遍所有的芒果,然后总结出个…

窗口函数之-前后函数(lag/lead)

窗口函数之-前后函数 应用:求同比增长、环比增长 lead(expression,n):返回当前行的后n行 > shift(-n) 数据超前n阶,与之对齐的就是后n行的数据lag(expression,n):返回当前行的前n行> shift(n)数据滞后n阶,与之对齐的就是前n行的数据 …

人工智能轨道交通行业周刊-第49期(2023.6.12-6.25)

本期关键词:设备智能维修、故障诊断、无人机巡查、车站联锁、LangChain、腾讯大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMe…

高效进行接口测试,简单易懂!

目录 前言 正文 1.Api文档导入 2.后端接口测试 3.mock数据 4.测试集接口自动化 总结 前言 日常测试过程中,常常需要多种工具来接力完成自己的接口测试任务。 比如说, 使用swagger查看接口文档, 使用mock编造接口数据对前端页面做测试…

面对高速PCB设计,你是否也有这些疑问?

在现代电子产品设计中,高速PCB设计是很重要的组成部分,然而由于高速信号的特殊性和复杂性,很多电子工程师在进行高速PCB设计时难免面临各种挑战及问题,那么面对这些挑战及问题,该如何解决? 1、添加测试点是…

管线业务模块实现

文章目录 1 .配电线路轨迹图2 )单线图存储功能3. 设备接线图1 )剖面绘制 电力管线业务模块是系统的电力业务功能,主要维护电气设备的电力连接关系以及电 缆在GIS 地图和工井内部的位置和走向。管线业务模块由配电线路的轨迹图、单线图、接 线…

介绍智能照明系统在绿色建筑中的应用与产品选型

【摘要】:智能照明系统应用在智能建筑中不仅能营造出舒适的生活、工作环境以及现代化的管理方式而且要具有一定的节能效果。给出了智能照明和传统照明系统的比较并分析了智能照明系统的节能。 【关键字】:智能建筑;智能照明;节能…

蓝库云:企业绩效管理对公司成长的重要性,被很多企业主所忽略

什么是绩效管理 绩效管理是一种管理方法,通过衡量和评估员工的工作绩效,来提高企业的效率和效益。它涉及一个系统性的过程,包括设定、评估和反馈员工目标,制定和实施成长计划和发展计划,以及与员工进行持续的沟通和反…

MacOS 中 ARM64 汇编 ldr =address 伪指令导致运行时崩溃的原因及解决

0. 概览 我们知道在 MacOS 的 as 汇编器中有一条 ldr 伪指令,使用它我们可以非常方便的将立即数加载到寄存器中。 不过,当 ldr 的源操作数是一个标签(Label)时,就会导致在运行时发生崩溃: 如上图所示&…