基于python+selenium的二次封装的实现


Posted in Python onJanuary 06, 2020

这是个人对selenium.webdriver写的一些常用操作的二次封装,也就相当于重写了,不再使用自带的框架,用自己写的框架完成。这样的话使代码更简洁,用自己的思想完成代码的编写。

基于python+selenium的二次封装的实现

首先在根目录下创建子目录名为Common作为公用数据,名字随自己取,在Common目录下创建basepage.py和dir_config文件。(关于这两个py文件要用来做什么,后面有说到)

首先我们打开dir_config文件

基于python+selenium的二次封装的实现

看名字就可以很清楚的看到这是要干什么。
logs_dir = os.path.join(base_dir,“OutPuts/logs”)
(至于为什么要这么写,我不做介绍了,这篇文章是针对于有基础来讲的)
用这一行来讲,就是日志存放的目录=我箭头指向的目录,每个都一样。
先把所需要存放的目录路径配置好,根据自己所需来配。

接下来我们来到basepage文件下

基于python+selenium的二次封装的实现

先把所需要的模块、包导入好,至于我们为什么要用到这些模块,后面就晓得了,嘻嘻嘻

基于python+selenium的二次封装的实现

创建一个类名为 BasePage
写一个初始化函数加上driver形参。self.driver = driver

基于python+selenium的二次封装的实现

基于python+selenium的二次封装的实现

这是等待元素操作的重写,就是WebdriverWait().until(expected_conditions.visibility_of_element_located())的重写
我后面还加了一个doc这个参数,上面我写了注释就是模块名_页面名称_操作名称,这样的话 如果报错的话 我可以在日志、截图、报告很清楚的看到是哪个模块,哪个页面,哪个操作出错了。还有其他的参数我都带了注释、以及每一行代码我都带了注释,我就不一一讲了。

基于python+selenium的二次封装的实现

这是查找元素的重写
为什么要写一个查找的元素,请看下方

基于python+selenium的二次封装的实现

这是点击操作的重写,我直接调用了查找,这个函数就是找到元素并点击。一遍而过。

比如send_keys()等等

基于python+selenium的二次封装的实现

并且在每次操作之前都加了日志
如logging.info(f"{doc}:元素:{locator}输入内容:{text}")
他这里如果是正确获取的话,日志会显示在哪个模块哪个元素中输入什么内容,写的一清二楚,如果错了,相反我也打了错误的日志。(doc就是哪个模块哪个页面哪个操作下)
还有很多其他的操作,都是一样的套路,如果觉得我这个重写写的不错的可以按照我的套路去写其他的操作

基于python+selenium的二次封装的实现

获取元素内容操作等等,我就不一一截图了
比如哪里出错了,会在指定的路径下存在报错日志,截图等等

基于python+selenium的二次封装的实现

而且每个错误都会带上doc方便自己排查错误。

好了,我们来实操,用下这个框架
首先创建一个登陆页面的py文件LoginPage

基于python+selenium的二次封装的实现

导入BasePage并创建一个类来继承BasePage
from PageLocators.LoginLocators.login_locators import LoginLocators as loc
这个模块是我存放login页面的定位元素

基于python+selenium的二次封装的实现

基于python+selenium的二次封装的实现

由于我们在BasePage写了初始化函数,所以这里不需要写了
然后我们定义一个login的函数带上username,password参数,这是代表输入用户名和密码的形参
再定义一个doc
直接用我们刚才重写的二次封装来用
首先我们是要找到用户名输入框这个元素,在这个元素中输入我们的用户名
就可以直接用input_text()
self.input_text(loc.name_text,username,doc)
loc.name_text就是我们所定义的用户名输入框的定位表达式以及定位元素,我用元祖的形式括起来的。看上面的图片
后面username就是用户名的形参,等你测试用例调用登陆页面操作的时候再传用户名数据就好了,我每一个都带了doc,所以doc必传。
所有的操作都是一样的,理解一个就可以理解全部了。
楼主考虑到为什么元组的形式也可以传进去,这里我给个特写。

基于python+selenium的二次封装的实现

看我在locator前面加了这个符号,这个符号是解包的意思
self.driver.find_element(By.XPATH, ‘//*[contains(@name,“username”)]')
实际上就是这个意思。
然后我传个元祖直接引用就OK了

好了,然后我们再用pytest单元测试框架写测试用例,然后引用LoginPage

基于python+selenium的二次封装的实现

这红框内就是username和password的实参啦,我这是调用登陆的测试数据。这么理解就好了。
好了,这篇文章介绍完了。是不是很简洁、很实用、也方便后续修改,实际上就是为操作页面用自己的思想做了优化。
如果你觉得还不错的话 也可以按照我写的这种去修改,当然有自己的想法也更好。
然后这边我还放了pytest的一些内容,有些小伙伴没看懂的先不要管,后续我会单独写一篇关于pytest单元测试框架的使用。
当然有不懂的可以留言,想进群一起学习的可以私聊我
一起加油呀—呼呼呼!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python base64 decode incorrect padding错误解决方法
Jan 08 Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
python3 判断列表是一个空列表的方法
May 04 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
python实现统计文本中单词出现的频率详解
May 20 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python实现udp聊天窗口
Mar 31 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 Python
Python实现仓库管理系统
May 30 Python
Python使用Tkinter实现滚动抽奖器效果
Jan 06 #Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 #Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 #Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 #Python
Python tkinter三种布局实例详解
Jan 06 #Python
Python有参函数使用代码实例
Jan 06 #Python
python通过移动端访问查看电脑界面
Jan 06 #Python
You might like
用ODBC的分页显示
2006/10/09 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
妙用Jquery的val()方法
2012/06/27 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python 寻找局部最高点的实现
2019/12/05 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
计算机专业毕业生自荐信
2013/12/31 职场文书
学前教育专业求职信
2014/09/02 职场文书
车间主任岗位职责
2015/02/03 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
海上钢琴师观后感
2015/06/03 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android