新手练习python+selenium自动化测试实战项目【还有其他项目】

说明:本项目采用流程控制思想,未引用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 fromseleniumimport 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

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

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

相关文章

Stable Diffusion 提示词技巧

文章目录 背景介绍如何写好提示词提示词的语法正向提示词负向提示词 随着AI技术的不断发展,越来越多的新算法涌现出来,例如Stable Diffusion、Midjourney、Dall-E等。相较于传统算法如GAN和VAE,这些新算法在生成高分辨率、高质量的图片方面表…

Gazebo仿真环境下的强化学习实现

Gazebo仿真环境下的强化学习实现 主体源码参照《Goal-Driven Autonomous Exploration Through Deep Reinforcement Learning》 文章目录 Gazebo仿真环境下的强化学习实现1. 源码拉取2. 强化学习实现2.1 环境2.2 动作空间2.3 状态空间2.4 奖励空间2.5 TD3训练 3. 总结 1. 源码…

HTTP协议详解:互联网通信背后的规则与秘密

个人主页:insist--个人主页​​​​​​ 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、HTTP协议的基本概念 二、HTTP协议的主要特…

web题型

本文在别人的基础上对于一些地方做了一点补充 0X01 命令执行 漏洞原理 没有对用户输入的内容进行一定过滤直接传给shell_exec、system一类函数执行 看一个具体例子 cmd1|cmd2:无论cmd1是否执行成功,cmd2将被执行 cmd1;cmd2:无论cmd1是否执行成功,cm…

SpringBoot项目(jar)部署,启动脚本

需求 SpringBoot项目(jar)部署,需要先关闭原来启动的项目,再启动新的项目。直接输入命令,费时费力,还容易出错。所以,使用脚本启动。 脚本 脚本名:start.sh 此脚本需要放置在jar包…

【算法】递归的概念、基本思想

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

JavaScript Web APIs-01学习

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

ASUS华硕VivoBook15笔记本V5200EA_X515EA原装出厂Win11预装OEM系统

华硕11代酷睿笔记本电脑VivoBook_ASUSLaptop X515EA_V5200EA原厂Windows11系统 自带显卡、声卡、网卡、蓝牙等所有驱动、出厂主题壁纸、Office办公软件、华硕电脑管家MyASUS、迈克菲等预装程序 链接&#xff1a;https://pan.baidu.com/s/1yAEdA7aiuHK4CTdGLlSOKw?pwdo45a …

Azure - AzCopy学习

使用 AzCopy 将本地数据迁移到云存储空间 azcopy login 创建存储账号 ./azcopy login --tenant-id 40242385-c249-4746-95dc-4a0b64d49dc5这里的—tenant-id 在下面的地方查看&#xff1a;目录 ID&#xff1b;需要拥有Storage Blob Data Owner 的权限账号下可能会有很多目录&am…

编译工具:CMake(六) | 使用外部共享库和头文件

编译工具&#xff1a;CMake&#xff08;六&#xff09; | 使用外部共享库和头文件 步骤引入头文件搜索路径为 target 添加共享库 步骤 在/Compilation_tool/cmake 目录建立 t4 目录 建立src目录&#xff0c;编写源文件main.c&#xff0c;内容如下&#xff1a; #include <…

RabbitMQ入门

1、RabbitMQ概念简介 RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用之间共享数据&#xff0c;RabbitMQ是使用Erlang语言来编写的&#xff0c;并且RabbitMQ是基于AMQP协议的。 AMQP协议模型 AMQP全称&#xff1a;Advanced Message Q…

浅探Android 逆向前景趋势~

前段时间&#xff0c;我和朋友偶然间谈起安卓逆向&#xff0c;他问我安卓逆向具体是什么&#xff0c;能给我们带来什么实质性的东西&#xff0c;我也和朋友大概的说了一下&#xff0c;今天在这里拿出来和大家讨论讨论&#xff0c;也希望帮助大家来了解安卓逆向。 谈起安卓逆向…

Annual Inspection

机动车年检流程【交警12123】APP 到【检查地方】门口墙上贴着 然后上缴钥匙&#xff0c;等待&#xff0c;本次等待不到半小时搞定&#xff0c;速度很满意&#xff0c; 发现检测人员把你的里程数纠正了。 给你的行驶证&#xff0c;打印这些字样&#xff1a;检验有效期至XXXX 再给…

WebGPU助力客户端Crypto/ZK

1. 引言 前序博客&#xff1a; CUDA入门WebGPUZKP&#xff1a;客户端证明WebGPU入门 正如Personae Labs团队2022年11月博客 Efficient ECDSA & the case for client-side proving 中所指出&#xff1a; 仅适用于高端笔记本电脑的5分钟证明生成时长&#xff0c;远不是可行…

Leetcode: 1. 两数之和 【题解超详细】

前言 有人夜里挑灯看花&#xff0c;有人相爱&#xff0c;有人夜里开车看海&#xff0c;有人leetcode第一题都做不出来。 希望下面的题解可以帮助你们开始 你们的 leetcode 刷题 的 天降之路 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…

【ES6】Promise的入门介绍

Promise 是 JavaScript 中的一个对象&#xff0c;用于处理异步操作。Promise 对象代表一个最终可能完成&#xff08;并得到结果&#xff09;或失败&#xff08;并被拒绝&#xff09;的操作&#xff0c;以及其结果的值。 一个 Promise 有三种状态&#xff1a; Pending&#xf…

基于costas环的载波同步系统matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................ I_Dataroun…

Spring-5.0.x源码下载及本地环境搭建

一、Spring源码下载 从github上下载Spring的源代码 下载地址&#xff1a;https://github.com/spring-projects/spring-framework 访问地址之后&#xff0c;打开Spring的代码页面找到你想下载的版本&#xff0c;如5.0.x&#xff0c;如下图所示&#xff1a; 下载方式一&#x…

java+jsp+servlet+mysql蛋糕商城

项目介绍&#xff1a; 本系统为基于jspservletmysql的蛋糕商城&#xff0c;包含管理员和用户角色&#xff0c;用户功能如下&#xff1a; 用户&#xff1a;注册、登录系统&#xff1b;查看商品分类&#xff1b;查看热销、新品商品&#xff1b;查看商品详情&#xff1b;搜索商品…

电磁式电压互感器直流电阻测试

试验目的 测量电磁式电压互感器直流电阻的目 的是检查其一次、 二次绕组的质量及回路的完整性&#xff0c; 以发现各种原因所造成的导线断裂、 接头开焊、 接触不良、 匝间短路等缺陷。 试验设备 变压器直流电阻测试仪 厂家&#xff1a; 湖北众拓高试 试验方法 一次绕组直流…