Python+Selenium做自动化测试(超详细整理)

一、项目介绍

目的

测试某官方网站登录功能模块可以正常使用【文末有配套视频教程和免费的资料文档领取】

用例

1.输入格式正确的用户名和正确的密码,验证是否登录成功;
2.输入格式正确的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;
3.输入格式正确的用户名和任意密码,验证是否登录失败,并且提示信息正确;
4.用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;
5.用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;

环境

Windows10 +Python3.6+selenium3.13+Pycharm

环境我想大多数人都会搭建,有事没事找百度,一搜一箩筐,哈哈!我自己刚学的时候也是各种问题各种百度,好在都解决了,感谢有度娘这么强大的存在!这里就不写环境怎么搭建了,直接进入主题。

二、脚本设计

目的

我们的测试脚本需要达到:脚本可移植,脚本模块化,测试数据分离,输出测试报告 等目的

脚本设计模式

代码实现

项目目录结构

 注:下面的文件存放在同一个目录下

 1 #! user/bin/python2 '''3 代码说明:麦子学院登录模块自动化测试用例脚本4 编写日期:5 设置者:linux超6 '''7 8 import time9 from selenium import webdriver10 from webinfo import webinfo11 from userinfo import userinfo12 from log_fiile import login_log13 from pathlib import Path14 15 def open_web():16     driver = webdriver.Firefox()17     driver.maximize_window()18     return driver19 20 def load_url(driver,ele_dict):21     driver.get(ele_dict['Turl'])22     time.sleep(5)23 24 def find_element(driver,ele_dict):25     # find element26     driver.find_element_by_class_name(ele_dict['image_id']).click()27     if 'text_id' in ele_dict:28         driver.find_element_by_link_text('登录').click()29 30     user_id = driver.find_element_by_id(ele_dict['userid'])31     pwd_id = driver.find_element_by_id(ele_dict['pwdid'])32     login_id = driver.find_element_by_id(ele_dict['loginid'])33     return user_id,pwd_id,login_id34 35 def send_val(ele_tuple,arg):36     # input userinfo37     listkey = ['uname','pwd']38     i = 039     for key in listkey:40         ele_tuple[i].send_keys('')41         ele_tuple[i].clear()42         ele_tuple[i].send_keys(arg[key])43         i+=144     ele_tuple[2].click()45 def check_login(driver,ele_dict,log,userlist):46     result = False47     time.sleep(3)48     try:49         err = driver.find_element_by_id(ele_dict['error'])50         driver.save_screenshot(err.text+'.png')51         log.log_write('账号:%s 密码:%s 提示信息:%s:failed\n' %(userlist['uname'],userlist['pwd'],err.text))52         print('username or password error')53     except:54         print('login success!')55         log.log_write('账号:%s 密码:%s :passed\n'%(userlist['uname'],userlist['pwd']))56         #login_out(driver,ele_dict)57         return True58     return result59 def login_out(driver,ele_dict):60     driver.find_element_by_class_name(ele_dict['logout']).click()61 '''62 def screen_shot(err):63     i = 064     save_path = r'D:\pythondcode\capture'65     capturename = '\\'+str(i)+'.png'66     wholepath = save_path+capturename67     if Path(save_path).is_dir():68         pass69     else:70         Path(save_path).mkdir()71     while Path(save_path).exists():72         i+=173         capturename = '\\'+str(i)+'.png'74         wholepath = save_path + capturename75     err.screenshot(wholepath)76 '''77 def login_test():78     log = login_log()79     #ele_dict = {'url': 'http://www.maiziedu.com/', 'text_id': '登录', 'user_id': 'id_account_l', 'pwd_id': 'id_password_l'80         #, 'login_id': 'login_btn','image_id':'close-windows-btn7','error_id':'login-form-tips'}81     ele_dict = webinfo(r'D:\pythoncode\webinfo.txt')82     #user_list=[{'uname':account,'pwd':pwd}]83     user_list = userinfo(r'D:\pythoncode\userinfo.txt')84     driver = open_web()85     # load url86     load_url(driver,ele_dict)87     #find element88     ele_tuple = find_element(driver,ele_dict)89     # send values90     ftitle = time.strftime('%Y-%m-%d', time.gmtime())91     log.log_write('\t\t\t%s登录系统测试报告\n' % (ftitle))92     for userlist in user_list:93         send_val(ele_tuple,userlist)94         # check login success or failed95         result = check_login(driver,ele_dict,log,userlist)96         if result:97             login_out(driver,ele_dict)98             time.sleep(3)99             ele_tuple = find_element(driver,ele_dict)
100     time.sleep(3)
101     log.log_close()
102     driver.quit()
103 
104 if __name__ == '__main__':
105     login_test()
 1 #! user/bin/python2 '''3 代码说明:从文本文档中读取用户信息4 编写日期:5 设置者:linux超6 '''7 8 import codecs9 
10 def userinfo(path):
11     file = codecs.open(path,'r','utf-8')
12     user_list = []
13     for line in file:
14         user_dict = {}
15         result = [ele.strip() for ele in line.split(';')]
16         for sult in result:
17             re_sult = [ele.strip() for ele in sult.split('=')]
18             user_dict.update(dict([re_sult]))
19         user_list.append(user_dict)
20     return user_list
21 
22 if __name__ == '__main__':
23     user_list = userinfo(r'D:\pythoncode\userinfo.txt')
24     print(user_list)
 1 #! user/bin/python2 '''3 代码说明:从文本文档中读取web元素4 编写日期:5 设置者:linux超6 '''7 8 import codecs9 
10 def webinfo(path):
11     file = codecs.open(path,'r','gbk')
12     ele_dict = {}
13     for line in file:
14         result = [ele.strip() for ele in line.split('=')]
15         ele_dict.update(dict([result]))
16     return ele_dict
17 
18 if __name__ == '__main__':
19     ele_dict = webinfo(r'D:\pythoncode\webinfo.txt')
20     for key in ele_dict:
21         print(key,ele_dict[key])
 1 #! user/bin/python2 '''3 代码说明:测试输出报告4 编写日期:5 设置者:linux超6 '''7 8 import time9 
10 class login_log(object):
11     def __init__(self,path='',mode='w'):
12         filename = path + time.strftime('%Y-%m-%d',time.gmtime())
13         self.log = open(path+filename+'.txt',mode)
14     def log_write(self,msg):
15         self.log.write(msg)
16     def log_close(self):
17         self.log.close()
18 if __name__ == '__main__':
19     log=login_log()
20     ftitle = time.strftime('%Y-%m-%d',time.gmtime())
21     log.log_write('xiaochao11520')
22     log.log_close()
1 uname=273839363@qq.com;pwd=xiaochao11520
2 uname=273839363;pwd=xiaochao11520
3 uname= ;pwd=xiaochao11520
4 uname=273839363@qq.com;pwd=
5 uname=2738;pwd=xiaochao
1 Turl=http://www.maiziedu.com/
2 text_id=登录
3 userid=id_account_l
4 pwdid=id_password_l
5 loginid=login_btn
6 error=login-form-tips
7 logout=sign_out
8 image_id=close-windows-btn7

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处:

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

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

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

相关文章

apache、nginx、php 隐藏版本号

apache、nginx、php 隐藏版本号 针对的系统都是CentOS 1、没配置之前 1.1 Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.2.24 mod_wsgi/3.4 Python/2.7.5 1.2 Server: nginx/1.16.0 1.3 X-Powered-By:7.2.24 2、配置信息 不知道具体位置,可…

VirtualBox安装linuxmint-21.2虚拟机并配置网络

VirtualBox安装linuxmint-21.2虚拟机并配置网络 适用于在VirtualBox平台上安装linuxmint-21.2虚拟机。 1. 安装准备 1.1 安装平台 Windows 11 1.2. 软件信息 软件名称软件版本安装路径Oracle VM VirtualBoxVirtualBox-7.0.12-159484D:\softwareCentOS7CentOS-7.9.2009E:\…

STM32——OLED实验

1.OLED简介 OLED,即有机发光二极管 OLED引脚说明 引脚说明: 1、CS:OLED片选信号(低电平有效) 2、WR:向OLED写入数据 3、RD:向OLED读取数据 4、D[7:0]:8位双向数据线,有…

kubebuilder+code-generator开发k8s的controller

本文记录用kubebuilder和code-generator开发k8s的crd控制器。 概览 和k8s.io/code-generator类似,是一个码生成工具,用于为你的CRD生成kubernetes-style API实现。区别在于: Kubebuilder不会生成informers、listers、clientsets&#xff0c…

宠物服务新篇章:预约小程序带来的变革

随着科技的进步和互联网的普及,小程序已经成为了一种非常受欢迎的应用形式。对于宠物门店来说,开发一个预约小程序可以大大提高客户体验和管理效率。下面是一份宠物门店预约小程序的开发指南。 浏览器搜索乔拓云,登录乔拓云网后台&#xff0c…

大数据仓库开发规范示例

大数据仓库开发规范示例 一、前提概要二、数仓分层原则及定义2.1 数仓分层原则2.2 数仓分层定义 三、数仓公共开发规范3.1 分层调用规范3.2 数据类型规范3.3 数据冗余规范3.4 NULL字段处理规范3.5 公共字段规范3.6 数据表处理规范3.7 事实表划分规范 四、数仓各层开发规范4.1 分…

二十四、同域名下JSESSIONID重叠导致退出

同域名下JSESSIONID重叠导致退出 近期在开发项目的时候发现,如果同域名的情况下,如果把一个单页面无登录系统嵌套进入另外一个系统,那么会出现相互退出的问题。 思考解决方案 一、清除掉嵌套的系统的JSESSIONID,意思就是嵌套系统不设置JSESSIONID 1找寻出问题接口 在无痕…

【电源专题】案例:在EN脚加个电阻就能解决电源下电输出振荡?

案例背景:在某产品上使用一颗升压芯片发现下电输出波形振荡,但此产品并不是第一个使用此升压芯片的。早先此升压芯片使用在其他产品上没有报过这个异常。 分析方法:使用DEMO板,查看标准DEMO板无异常。将异常板卡上的参数与全部换到DEMO板上发现同样存在异常。 推测原因:…

Maya参考图的导入和层的应用

参考视频:08.参考图的导入和层的应用_哔哩哔哩_bilibili 前视图/右视图模式下导入图形 创建图层 锁定后可以避免图片位置的移动 前视图和右视图要根据参照物对齐 与模型保持一定距离,同时把该参照图添加到图层中 模型可以添加到图层2中

Qt应用开发(安卓篇)——Linux下Qt15.5.2配置Android

目录 一、前言 二、Qt安装 三:JDK安装 四:安装SDK,NDK 五、其他事项 六、新建项目 一、前言 看网上教程,多数是windows环境下的,配置也很简单,想不到自己配置的时候却遇到很多问题,传了一…

0_项目git地址——正点原子minifly与crazyflie

1、说明: 在每个专栏的第一篇文章,笔者都会贴出项目的git地址,方便后来者学习和复现; 下面介绍两个项目的官网资料和git地址,最后给出两者的对比; 2、正点原子minifly (1)minifly官网资料下载中心&#…

【深度学习每日小知识】Training Data 训练数据

训练数据是机器学习的基本组成部分,在模型的开发和性能中起着至关重要的作用。它是指用于训练机器学习算法的标记或注释数据集。以下是与训练数据相关的一些关键方面和注意事项。 Quantity 数量 训练数据的数量很重要,因为它会影响模型的泛化能力。通常…

Flink standalone集群部署配置

文章目录 简介软件依赖部署方案二、安装1.下载并解压2.ssh免密登录3.修改配置文件3.启动集群4.访问 Web UI 简介 Flink独立模式(Standalone)是部署 Flink 最基本也是最简单的方式:所需要的所有 Flink 组件, 都只是操作系统上运行…

Python--装饰器

在 Python 中,装饰器是一种特殊类型的函数,它们用于修改或增强其他函数或方法的行为。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。使用装饰器可以在不修改原函数代码的前提下,给函数添加新的…

Linux 网络设置与基础服务

一 配置网络设置 主机名 hostname IP地址/netmask ifconfig ; ip a 路由:默认网关 route -n DNS服务器 cat /etc/resolv.conf 网络连接状态 ss netstat 域名解析 ns…

索引不是银弹

数据库索引:不是银弹 使用环境索引分类创建索引的代价最佳实践不是所有针对索引列的查询都能使用索引加速查询 索引只能匹配列的前缀条件涉及函数操作的无法使用索引联合索引只能匹配左边的列 总结 数据库索引是优化性能的良药,但却不是银弹&#xff01…

10-skywalking告警

https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md 5.1:告警指标 ~$ vim /apps/apache-skywalking-apm-bin/config/oal/core.oal service_resp_time # 服务的响应时间 service_sla # 服务http请求成功率SLV,比…

09-Python服务链路追踪案例

skyWalking Python agent requires SkyWalking 8.0 and Python 3.7 # 将django包导入 ~$ cd /apps ~$ tar xf django-test.tgz ~$ cd django-test# 安装模块 ~$ apt install python3-pip ~$ pip3 install -r requirements.txt# 创建django项目mysite ~$ django-admin startpro…

创建一个简单鸿蒙app项目

文章目录 前言TypeScript 基础类型创建一个鸿蒙app总结 一、前言 鸿蒙系统上的开发已经是趋势了,必须紧跟时代的潮流。先简单了解下鸿蒙系统中,我们开发一个app需要用到的语言,那么就是TypeScript。这篇文章主要讲的就是一些基础的语法。最…

算法回忆录——排序

文章目录 1. 插入排序2. 选择排序3. 冒泡排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序8. 计数排序9. 桶排序10. 基数排序 1. 插入排序 分为两个序列,前面一个序列是排好序的,后面一个序列是未排好的。未排好的序列的第一个元素(a&#x…