在完成了日志类封装之后,那我们就要对测试基类进行实现,在其中对一些请求再次封装,在项目下新建一个framework文件夹,在文件夹下新建Base_Page.py文件,这是用来写测试基类的文件。在项目下新建screenshots文件件,用来存放截图。项目结构如下。

具体怎么封装还是要看被测试需要什么,只能提供一个大致思路,我项目能用的封装,你项目并不一定能用

测试基类的思路就是把所有能公用的方法全部封装,并加上日志输出。报错截图等。

看下Base_Page.py下具体代码

from Logs.log import log1
from selenium.common.exceptions import NoSuchElementException
import getcwd
import os
import timeclass BasePage:"""测试基类"""def __init__(self, driver):self.driver = driver@staticmethoddef isdisplayed(element):"""元素是否存在"""value = element.is_displayed()return value@staticmethoddef my_sleep(secondes):"""强制等待"""time.sleep(secondes)log1.info('暂停%d秒' % secondes)def get_img(self):"""截图"""path = os.path.join(getcwd.get_cwd(), 'screenshots/')  # 拼接截图保存路径rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))  # 按格式获取当前时间screen_name = path + rq + '.png'  # 拼接截图文件名# noinspection PyBroadExceptiontry:self.driver.get_screenshot_as_file(screen_name)log1.info("截图保存成功")except BaseException:log1.error("截图失败", exc_info=1)def find_element(self, selector):"""定位元素"""by = selector[0]value = selector[1]element = Noneif by in ['id', 'name', 'class', 'tag', 'link', 'plink', 'css', 'xpath']:# noinspection PyBroadExceptiontry:if by == 'id':element = self.driver.find_element_by_id(value)elif by == 'name':element = self.driver.find_element_by_name(value)elif by == 'class':element = self.driver.find_element_by_class_name(value)elif by == 'tag':element = self.driver.find_element_by_tag_name(value)elif by == 'link':element = self.driver.find_element_by_link_text(value)elif by == 'plink':element = self.driver.find_element_by_partial_link_text(value)elif by == 'css':element = self.driver.find_element_by_css_selector(value)elif by == 'xpath':element = self.driver.find_element_by_xpath(value)else:log1.error('没有找到元素')log1.info('元素定位成功。定位方式:%s,使用的值%s:' % (by, value))return elementexcept NoSuchElementException:log1.error("报错信息:", exc_info=1)self.get_img()  # 调用截图else:log1.error('输入的元素定位方式错误')def type(self, selector, value):"""输入内容"""element = self.find_element(selector)element.clear()log1.info('清空输入内容')# noinspection PyBroadExceptiontry:element.send_keys(value)log1.info('输入的内容:%s' % value)except BaseException:log1.error('内容输入报错', exc_info=1)self.get_img()def click(self, selector):"""点击元素"""element = self.find_element(selector)# noinspection PyBroadExceptiontry:element.click()log1.info('点击元素成功')except BaseException:display = self.isdisplayed(element)if display is True:self.my_sleep(3)element.click()log1.info('点击元素成功')else:self.get_img()log1.error('点击元素报错', exc_info=1)def use_js(self, js):"""调用js"""# noinspection PyBroadExceptiontry:self.driver.execute_script(js)log1.info('js执行成功,js内容为:%s' % js)except BaseException:log1.error('js执行报错', exc_info=1)def switch_menue(self, parentelement, secelement, targetelement):"""三级菜单切换"""self.my_sleep(3)# noinspection PyBroadExceptiontry:self.driver.switch_to_default_content()self.click(parentelement)log1.info('成功点击一级菜单:%s' % parentelement)self.click(secelement)log1.info('成功点击二级菜单:%s' % secelement)self.click(targetelement)log1.info('成功点击三级菜单:%s' % targetelement)except BaseException:log1.error('切换菜单报错', exc_info=1)def switch_ifarme(self, selector):"""切换farm"""element = self.find_element(selector)# noinspection PyBroadExceptiontry:self.driver.switch_to.frame(element)log1.info('切换frame成功')except BaseException:log1.error('切换frame报错', exc_info=1)def get_title(self):"""获取title"""title = self.driver.titlelog1.info('当前窗口的title是:%s' % title)return titledef my_quit(self):"""关闭浏览器"""self.driver.quit()log1.info('关闭浏览器')

说一下点击的方法为什么要这么封装,有一些时候,元素明明能定位到,但是就是点击不到。这是因为一些渲染和js技术的原因。导致元素没有加载出来,这时候去点击肯定会报错,提示元素不存在。所以这里当报错的时候,强制等待几秒。然后再去点击。

只写了一部分,提供一个思路,还有很多方法可以继续封装来完善框架,比如窗口切换等。

接下来测试一下封装的代码

在test_base.py写如下代码并运行

from selenium import webdriver
from framework.Base_Page import BasePage
dr = webdriver.Firefox()
dr.get('https:www.baidu.com')
s = dr.window_handles
driver = BasePage(dr)
kw = ['id','kw']
driver.type(kw,'selenium+python')
driver.my_sleep(3)
driver.type(kw,'selenium')
su = ['id','su']
driver.click(su)
driver.get_img()
driver.my_sleep(2)
driver.get_title()

python3+selenium框架设计04-封装测试基类相关推荐

  1. Junit4小技巧-测试基类

    在Junit4使用的时候,直接运行,通过控制台输出来进行问题判断,,这比启用debug模式更加迅速,但有时需要知道哪个方法开始输出,如果每次都在方法开始时,打印方法名称,那是较麻烦的事情. 通过测试基 ...

  2. 自动化测试基础篇--Selenium框架设计(POM)

    一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...

  3. 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)

    (给Python开发者加星标,提升Python技能) 来源:  叁藏法师 https://www.cnblogs.com/sanzangTst/p/8376550.html [导语]Selenium是 ...

  4. python单元测试框架unittest介绍和使用_Python+Selenium框架设计篇之-简单介绍unittest单元测试框架...

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unittest是一 ...

  5. android mvp框架基类,Android MVP架构项目搭建封装,基类封装

    综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...

  6. Android 获取通讯录联系人,打开通讯录获取联系人信息;整个流程封装在基类中;

    打开原生通讯录获取联系人姓名和手机号 1.获取通讯录权限: <!--访问通讯录--><uses-permission android:name="android.permi ...

  7. LINQTOSQL作为底层ORM框架后,我们的数据基类就变成了这个样子

    1: namespace Data 2: { 3: /// <summary> 4: /// OA数据库基类 5: /// </summary> 6: public abstr ...

  8. php smarty框架案例,php封装的smarty类案例

    这篇文章主要介绍了php封装的smarty类,针对Smarty的基本操作技巧进行了封装整理,具有一定参考借鉴价值,需要的朋友可以参考下 具体如下: /** * Project: Smarty: the ...

  9. Robot Framework + Selenium 框架,关键字封装,知识点记录

    目录 框架概述: 通用关键字: 等待类关键字: 通用组件 等待 元素: 通用组件 获取 元素居中滚动像素: 通用组件 页面滚动 : 通用组件 等待包含文字: 通用组件 自动切换frame : 通用组件 ...

最新文章

  1. 图神经网络的解释性综述!
  2. python命令行添加Tab键自动补全
  3. JS 触发服务器事件
  4. 《Flume日志收集与MapReduce模式》一2.2 Flume配置文件概览
  5. SQLite学习手册(数据表和视图)
  6. mysql主主 主键冲突_mysql主从复制原理,主主复制时主键冲突解决
  7. android文件管理器,ES文件浏览器(com.estrongs.android.pop) - 4.2.4.6.1 - 应用 - 酷安
  8. [html] 说说你对HTML元素的显示优先级的理解
  9. 树莓派安装python3.5_树莓派 | 04 安装基于python3.5的tensorflow,解决python版本不匹配问题...
  10. 网易严选搜索推荐实践之:“全能选手”召回表征算法实践
  11. 关于 Access 数据库数据类型
  12. HCIP-Cloud Service Solutions Architect
  13. 这个非遗大师有点“潮”!他在网上招徒弟!
  14. linuxping百度未知的名称或服务_有赞怎么打通百度小程序?开通有什么好处?
  15. uniapp修改tabbar背景图片
  16. c语言获奖程序,1987年国际C语言混乱代码大赛获奖的一行代码
  17. 简单的小升初摇号小程序
  18. 使用Freeman链码提取影像边界
  19. Redis command timed out 两种异常情况
  20. toad分析oracle日志,toad for oracle如何分析sql

热门文章

  1. Android绘图(二)使用 Graphics2D 实现动态效果
  2. 极米、当贝、坚果3000内的投影仪有什么推荐?
  3. 操作系统-5大功能、5大类型
  4. Android实现可编辑下拉菜单
  5. 解决WPS公式上浮问题
  6. java算球体积的代码_java - 球体体积法不起作用 - 堆栈内存溢出
  7. 企业数字化转型saas电商系统(已开源)
  8. 如何在虚拟机中运行知乎App
  9. 江苏单招C语言试题,2011年对口单招计算机试卷(C语言+原理+电工答案).doc
  10. pycharm2017.3.3破解到2099年