干货-卷起来,企业级web自动化测试实战落地(二)

news2024/9/22 21:30:16


前言

WebDriver的基本使用

实例化一个WebDriver的对象(使用默认的火狐浏览器 v46或者以下)
driver = webdriver.Firefox()注意,一定要写括号,代表实例化对象
打开网址

driver.get("http://localhost/xxxxx.com")

查找元素
用id : driver.find_element_by_id(“account”)
用name:driver.find_element_by_name(“password”)
用xpath css_selector

对元素的操作

clear()
click()
send_keys()

使用python的休眠,给浏览器留出时间加载页面

sleep(3)

关闭退出火狐

driver.quit()

selenium WebDriver的进阶操作

unittest 单元测试框架的使用验证:断言 self.assertEqual(expected, actual, msg)
管理测试用例: 每一个以 test_ 开头的方法

可以在自动化测试用例中忽略的部分:
编号 名称 优先级 模块(项目) ## 忽略

必须在自动化用例中强调的部分:
前置条件 setUp();
输入数据;
步骤 test_ 开头的方法;
预期结果 test_ 开头的方法;
清理 tearDown();

测试的初始化 以及 测试的结束
setUpClass() 和 tearDownClass()

注意:
上述方法 与 setUp() 和 tearDown() 的调用顺序

定位方式的使用
css_selector方法调用:

driver.find_element_by_css_selector("#langs > button")

CSS的3种选择器:
id: 使用#+id
tag: 使用tag
class: 使用.+class

CSS selector的获取:
可以使用开发者工具,定位的元素,右键 | 复制 selector(复制CSS路径)
Chrome使用了相对路径 #langs > button

Firefox(firebug):使用了绝对路径 html.screen-desktop-wide.device-desktop body.m-user-login div.container div#login div.panel-head div.panel-actions div#langs.dropdown.open button.btn

class_name通过 class定位元素,必须保持 class唯一,否则定位会失败
driver.find_element_by_class_name(“btn”)

link_text 和 partial_link_text
文字选择正确就行了

xpath:
chrome内核的开发者工具,复制的是相对的xpath
firefox内核的开发者工具(firebug),复制的绝对的xpath

特定的元素的处理
frame

<iframe>
<html>
<head></head>
<body>
	<我们需要定位的元素>
</body>
</html>
</iframe>

上述代码中,我们需要定位的元素,处于 一个frame中:我们需要先切换到对应的frame中,然之操作,之后再退出

## 我们需要先切换到对应的frame中
## 切换frame
driver.switch_to.frame("frame_name")
## 或者用保险的办法切换frame
frame_element = driver.find_element_by_css_selector("#frame_id")
driver.switch_to.frame(frame_element)

## 开始做定位操作
## <—————–>
## 结束做定位操作
## 切换frame必须成对的出现。
## 退出切换的frame到默认的网页html中
driver.switch_to.default_content()

selectselect定位有个前提,元素标签必须是 select

<select>
</select>

## 部门是个 select 元素 <select></select>

## 需要3步骤:
## 1. 找到 select 的元素,赋值给变量 dept_select
## 2. 实例化 dept_select 为 Select()的对象 为 user_adding_dept
## 3. 调用 user_adding_dept 的方法 select_by_index()给元素赋值

示例代码

# 找到 select 的元素,赋值给变量 dept_select
dept_select = driver.find_element_by_id("dept")
# 实例化 dept_select 为 Select()的对象 为 user_adding_dept
user_adding_dept = Select(dept_select)
# 调用 user_adding_dept 的方法 select_by_index()给元素赋值
user_adding_dept.select_by_index(2)

#清除 cookie在打开浏览器的时候,需要清理cookie。
from selenium import webdriver
driver = webdriver.Firefox()
driver.delete_all_cookies()
driver.get("…")

数据驱动的方式编写用例

主要有两种形式进行数据驱动

数据驱动:用外部数据来驱动测试用例的执行
数据库驱动:MySQL、Oracle、PostgreSQL、SQL Server

import pymysql


connect = pymysql.connect(host="xx", port=3306, user="root", passwd="xxx", db="xx)
cur = connect.cursor()
cur.execute("SELECT…")
mysql_data = cur.fetchall()

for row in mysql_data:
# 进行测试
# 使用字典类型
data_to_test = {
"key1": row[0],
"key2": row[1]
}
cur.close()
connect.close()

数据文件驱动:csv文件最典型、xml文件、txt文件

import csv


csv_file = open("xxx.csv", "r", encoding="utf8")
csv_data = csv.reader(csv_file)

for row in csv_data:
# 进行测试
# 使用字典类型
data_to_test = {
"key1": row[0],
"key2": row[1]
}
csv_file.close()

需要掌握的知识点:
python的字典类型 dict 类型;
python的读写文件;
python的读写数据库;
for循环;
注意资源的释放;
关闭数据库游标和连接;
关闭文件;

模块化的方式编写用例

需要将每个用例都需要用的公共的功能,抽取出来,放到一个公共类中,作为模块化

创建一个Python Package “common”,在里面创建一个ranzhi_common.py文件,里面添加RanzhiCommon类

login() : 普通登录,默认用admin/123456登录
logout():退出系统
login_by_dict(user_to_login):使用字典类型的参数进行登录,user_to_login 是一个字典类型 dict
change_language(lang):zh_CN, en_US, zh_TW 切换语言,需要参数传递要切换的语言
select_app(app):crm, admin, oa, cash, team 选择App,需要传递选择 后台管理 | 客户管理 。。。
select_menu_for_admin(menu): organization 选择了后台管理以后,选择菜单 组织
add_user(user_to_add): 使用字典类型的参数进行添加

创建测试用例的类

比如 ranzhi_test_01.py ranzhi_test_02.py ranzhi_test_03.py…
在这些类中调用上面创建的类,一般会放到setUp() 中

import unittest
from common.ranzhi_common import RanzhiCommon


class RanzhiTest01(unittest.TestCase):
	def setUp(self):
		ranzhi_common = RanzhiCommon()
	def test_xxx(self):
		ranzhi_common.login()
##….
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有不停学习、不断努力,才能超越昨天的自己,成就未来的辉煌。坚持追求梦想的路上虽然艰难,但每一步踏实向前,都会离成功更近一步。相信自己,勇往直前,奋斗到底!

锲而不舍的追求,终将登上成功的巅峰;只有敢于拼搏,才能收获辉煌的人生。愿你坚定信念,勇往直前,无惧困难与挑战,奋斗出属于自己的辉煌!

只有不畏困难,才能书写辉煌;只有持之以恒,才能攀登高峰;只有勇于创新,才能赢得未来。坚定信心,拼搏奋斗,追逐梦想的脚步永不止息!

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

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

相关文章

毫米波雷达 TI IWR1443 测试官方程序(Out Of Box Demo)

IWR1443 windows 文章目录 1、准备工作1.1、mmWave SDK1.2、Code Composer Studio&#xff08;CCS&#xff09;1.3、Uniflash1.4、TI Cloud Agent 2、导入工程3、烧录3.1、先将 IWR1443 调到 Flashing Mode3.2、使用 UniFlash 软件 4、运行GUI4.1、IWR1443 调到 Functional Mo…

【计算机组成与体系结构Ⅰ】实验0 Logisim 入门实验

一、实验目的 1&#xff1a;掌握加减法器工作原理。 2&#xff1a;能够设计出一个n位加减法器。 3&#xff1a;熟悉Logisim软件使用。 二、实验环境 &#xff08;1&#xff09;Logisim 2.7.1 &#xff08;2&#xff09;Microsoft Windows 10 三、实验内容 1&#xff1a;设…

FastAPI中如何正确理解和使用:async和await

1 缘起 项目需要, 技术选型使用FastAPI。 开发过程中,遇到需要异步操作的场景, 查阅相关FastAPI异步信息的过程中,发现了async和await组合技, 通过阅读官方文档和实际测试,发现,async和await并不是传统意义上的异步(如线程池异步执行任务), async和await的融合技是应…

SEGA: Semantic Guided Attention on Visual Prototype for Few-Shot Learning

方法比较简单&#xff0c;利用语义改进prototype&#xff0c;能促进性提升

如何系统学习分布式?

关键词&#xff1a;想要走存储/数据库方向的话&#xff0c;具体路线是啥&#xff1f;重点需要掌握精通哪些知识&#xff1f; 回答 那我简单说一下走存储/数据库这块的学习路线吧。 目前做存储比较热门的是分布式存储方向&#xff0c;有NoSQL的也有关系型数据库的&#xff0c…

21.DAC数模转换

1.STM32 DAC介绍&#xff1a; DAC(Digital to analog converter)即数字模拟转换器&#xff0c;它可以将数字信号转换为模拟信号。 DAC主要特性&#xff1a; 2个DAC转换器&#xff0c;每个转换器对应1个输出通道&#xff1b;8位或者12位单调输出&#xff1b;12位模式下数据左…

Coggle 30 Days of ML(23年7月)任务五:XGBoost训练与预测

Coggle 30 Days of ML&#xff08;23年7月&#xff09;任务五&#xff1a;XGBoost训练与预测 任务五&#xff1a;使用TFIDF特征和XGBoost完成训练和预测 说明&#xff1a;在这个任务中&#xff0c;你需要使用TFIDF特征和XGBoost算法完成训练和预测&#xff0c;进一步提升文本…

Matlab数学建模实战——(Lokta-Volterra掠食者-猎物方程)

1.题目 问题1 该数学建模的第一问和第二问主要是用Matlab求解微分方程组&#xff0c;直接编程即可。 求解 Step1改写 y(1)ry(2)f Step2得y的导数 y(1).2y(1)-ay(1)*y(2)y(2).-y(2)a*y(1)*y(2) Step3编程 clear; a0.01; F(t,y)[2*y(1)-a*y(1)*y(2);-y(2)a*y(1)*y(2)]; […

【Mac】Mac 通过路径找到对应的文件夹

mac 的快捷键 复制文件夹或文件全路径 命令&#xff1a;command Option C 跳转文件夹或文件 命令&#xff1a;command shift G 其他待补充

hexo #02 基本操作

本篇主要步骤 1、创建博客 1、创建博客 使用 $ hexo new [layout] <title>命令创建一篇新的博客。 PS hexo> npx hexo new post "test" Debugger attached. Debugger attached. INFO Validating config INFO Created: D:\hexo\source\_posts\test.md Wa…

MySQL表单查询以及多表查询

1.单表查询 CREATE TABLE emp ( empno int(4) NOT NULL, ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, mgr int(4) NULL DEFAULT NULL, hi…

基于51单片机的羽毛球计分器设计

功能&#xff1a; 本实例是基于51单片机的羽毛球计分器&#xff0c;主要硬件由51单片机最小系统&#xff0c;LCD1602液晶屏电路&#xff0c;按键电路构成。 1.本设计选用LCD1602液晶屏作为显示器件&#xff0c;用于记录两队的分数。 2.按照设计的功能模块共选用8个按键&#xf…

【软件测试】Git查看commit的提交历史(详细)一点即通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 查看提交历史 在提…

【MATLAB第53期】基于MATLAB的TSK模糊神经网络时间序列预测模型,含短期预测未来功能

【MATLAB第53期】基于MATLAB的TSK模糊神经网络时间序列预测模型&#xff0c;含短期预测未来功能 一、效果展示 二、数据设置 数据采用一列数据滑动窗口设置为5 &#xff0c;可自行设置70%训练30%测试预测未来值为10 &#xff0c;可自行设置&#xff0c;控制10以内 三、模型…

zabbix proxy的配置及zabbix实现高可用(监控 windows,java应用,SNMP等)

目录 zabbix proxy 分布式代理服务器部署zabbix proxy 代理服务器部署 Zabbix 高可用集群Zabbix 监控 Windows 系统Zabbix 监控 java 应用Zabbix 监控 SNMP zabbix proxy 分布式代理服务器 zabbix 分布式代理服务器&#xff0c;可以代替zabbix server 采集性能和可用性数据。z…

C++的范围for语句详解 附易错实例

&#x1f4af; 博客内容&#xff1a;C读取一行内个数不定的整数的方式 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&…

匿名管道的使用示例

目录 整体框架 通信步骤 创建管道 ​编辑创建子进程&关闭相应的fd ​编辑 进程间通信 父子进程通信之间四种场景 实现父亲读&#xff0c;孩子写的进程间通信 管道通信的使用场景样例实现 整体框架 通信步骤 创建管道 pipe的参数为输出型参数&#xff0c;返回读写端…

从小白到大神之路之学习运维第55天--------shell脚本实例应用

第三阶段基础 时 间&#xff1a;2023年7月7日 参加人&#xff1a;全班人员 内 容&#xff1a; shell实例 目录 shell脚本应用&#xff1a; 一、shell脚本 二、环境变量的基本使用 三、条件测试 shell脚本应用&#xff1a; 一、shell脚本 1、shell脚本的作用shell解…

MySql索引结构介绍

文章目录 1.索引概述2. 索引结构2.1 二叉树与红黑树索引结构2.2 B-Tree索引结构2.3 BTree介绍2.4 Hash索引介绍 1.索引概述 索引的概念 索引的演示 索引的优缺点 2. 索引结构 索引结构在不同的存储引擎中的支持情况&#xff0c;我们平时所说的索引&#xff0c;如果没有特殊的…

深度学习各类优化器大总结

一、优化算法设计原理 深度学习中的优化算法采用的原理是梯度下降法&#xff0c;即最小化目标函数 J ( θ ) J(\theta) J(θ)&#xff0c;最优化的求解过程&#xff0c;首先求解目标函数的梯度 ∇ J ( θ ) \nabla J(\theta) ∇J(θ)&#xff0c;然后将参数 θ \theta θ 向…