news 2026/6/22 23:26:38

Pythonselenium自动化测试实战项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pythonselenium自动化测试实战项目

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架

一、项目介绍

目的

测试某官方网站登录功能模块可以正常使用

用例

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

环境

Windows10 +Python3.6+selenium3.13+Pycharm

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

二、脚本设计

目的

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

脚本设计模式

代码实现

项目目录结构

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

1 #! user/bin/python 2 ''' 3 代码说明:麦子学院登录模块自动化测试用例脚本 4 编写日期: 5 设置者:linux超 6 ''' 7 8 import time 9 from selenium import webdriver 10 from webinfo import webinfo 11 from userinfo import userinfo 12 from log_fiile import login_log 13 from pathlib import Path 14 15 def open_web(): 16 driver = webdriver.Firefox() 17 driver.maximize_window() 18 return driver 19 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 element 26 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_id 34 35 def send_val(ele_tuple,arg): 36 # input userinfo 37 listkey = ['uname','pwd'] 38 i = 0 39 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+=1 44 ele_tuple[2].click() 45 def check_login(driver,ele_dict,log,userlist): 46 result = False 47 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 True 58 return result 59 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 = 0 64 save_path = r'D:\pythondcode\capture' 65 capturename = '\\'+str(i)+'.png' 66 wholepath = save_path+capturename 67 if Path(save_path).is_dir(): 68 pass 69 else: 70 Path(save_path).mkdir() 71 while Path(save_path).exists(): 72 i+=1 73 capturename = '\\'+str(i)+'.png' 74 wholepath = save_path + capturename 75 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 url 86 load_url(driver,ele_dict) 87 #find element 88 ele_tuple = find_element(driver,ele_dict) 89 # send values 90 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 failed 95 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/python 2 ''' 3 代码说明:从文本文档中读取用户信息 4 编写日期: 5 设置者:linux超 6 ''' 7 8 import codecs 9 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/python 2 ''' 3 代码说明:从文本文档中读取web元素 4 编写日期: 5 设置者:linux超 6 ''' 7 8 import codecs 9 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/python 2 ''' 3 代码说明:测试输出报告 4 编写日期: 5 设置者:linux超 6 ''' 7 8 import time 9 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

实在是不擅长写文章,写完感觉内容好少,其实这么一个小模块涉及到的知识还是挺多的,但是不知道该如何下手整理,想看的就对付看下把,实在抱歉!

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

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 15:49:16

关于Comtos Linux (朱雀)主体源码的选择

关于Comtos Linux (朱雀) 主体源码的选择问: 为什么Comtos Linux 9 (朱雀)不以RHEL 9或 Rocky Linux 9或AlmaLinux 9的稳定的源码为主体,而使用滚动的CentOS Stream 9的源码为主体呢? 使用稳定的RHEL 9或Rocky Linux 9或AlmaLinux 9的源码为…

作者头像 李华
网站建设 2026/6/18 5:40:15

超级Mini小车功能说明

巴掌车模01 超Mini小车功能说明1. 按键说明 小车左侧按键为启动按键,启动时需小车前方传感器处于背景布上(自动校准传感器数据),启动后小车会自行往前移动,若遇到赛道(白色胶带),则会沿着赛道行驶。 小车右侧为关机按键&#xff…

作者头像 李华
网站建设 2026/6/22 21:32:32

STC32G12单片机替换成STC32F12单片机,直接替换的结果

简 介: 本文测试了STC32F12单片机替换STC32G12单片机的可行性。实验表明,虽然两款单片机管脚兼容,但32F12增加了硬件数学运算单元。测试发现,直接下载32G12程序无法运行,需重新编译工程。使用硬件数学运算后&#xff0…

作者头像 李华
网站建设 2026/6/22 16:35:10

SIEMENS 6SL3210-1PE33-0CL0 变频器

常见故障及解决方法‌通信故障‌‌原因‌:通信线路松动、参数设置错误(如波特率、设备名称不匹配)或接口损坏。‌解决‌:检查线路连接,核对参数一致性,更换损坏接口。‌过流/过压/欠压‌‌过流‌&#xff1…

作者头像 李华
网站建设 2026/6/23 13:11:40

软件测试常用的7种方法,最后一个是升职加薪关键!(零基础小白转行IT互联网高效进阶)

一般而言,软件测试方法分为黑盒测试、白盒测试、灰盒测试、静态测试、动态测试、手动测试、自动化测试和探索性测试等类型。 【1】黑盒测试 黑盒测试又称功能测试、数据驱动测试或基于需求规格说明书的功能测试。该测试方法验证被测对象使用质量及外部质量表现。 …

作者头像 李华
网站建设 2026/6/22 15:41:28

【RTOS】EasyLog的移植与使用

当前log的突出问题: ①log不方便定位到源程序所在位置 ②log不分主次,比较难生成想要的信息 1. 彩色log 1.1 编译器内置宏:__FILE__,__LINE__ led1下直接打印出当前文件的行号和名字 led2复制粘贴过来,改一下引脚 实验现象 哎…

作者头像 李华