web自动化测试框架

news2024/11/20 21:37:12

本文介绍web自动化测试框架 

 ●Base:用来对Selenium API进行二次封装。

对Selenium API进行二次封装的目的是简化一些复杂的操作,但是千万不要为了封装而封装。

封装好后,其他页面类可以集成basepage,调用这些方法。

from selenium.webdriver.support.ui import WebDriverWait
'''
这里我们定义一个名为"Base"的类,对Selenium WebDriver提供的API进行二次封装
'''


class Base(object):
      def __init__(self, driver):
           '''
           调用该类的时候给其传递一个driver
           :param driver:
           '''
           self.driver = driver


      def split_locator(self, locator):
           '''
           分解定位表达式,如"id,kw",拆分后返回定位器"id"和定位器的值"kw"
           :param locator: 定位方法+定位表达式组合字符串,如"id,kw"
           :return: locator_dict[by], value:返回定位方式和定位表达式
           '''
           if len(locator.split(',')) == 3:
                 by = locator.split(',')[0]  # 定位器
                 value = locator.split(',')[1] + ',' + locator.split(',')[2]
           else:
                 by = locator.split(',')[0]  # 定位器
                 value = locator.split(',')[1] # 定位器值
           # 这里是为了方便,所以简写了定位器
           locator_dict = {
                 'id': 'id',
                 'name': 'name',
                 'class': 'class name',
                 'tag': 'tag name',
                 'link': 'link text',
                 'plink': 'partial link text',
                 'xpath': 'xpath',
                 'css': 'css selector',
           }
           if by not in locator_dict.keys():
                 raise NameError("Locator Err!'id',only 'name','class','tag','link','plink', 'xpath','css' can be used.")
           return locator_dict[by], value


      def get_element(self, locator, sec=20):
           """
           获取一个元素
           :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如"id,kw"
           :param sec: 等待秒数
           :return: 如果元素可找到则返回element对象,否则返回False
           """
          by, value = self.split_locator(locator)
           try:
               element = WebDriverWait(self.driver, sec, 1).until(lambda x: x.find_element(by=by, value=value))
               return element
           except Exception as e:
               raise e

      def get_elements(self, locator, sec=20):
           """
           获取一组元素
           :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如"id,kw"
           :return: elements
           """
           by, value = self.split_locator(locator)
           try:
               elements = WebDriverWait(self.driver, 60, 1).until(lambda x: x.find_elements(by=by, value=value))
               return elements
           except Exception as e:
               raise e

if __name__ == '__main__':
     from selenium import webdriver
     from time import sleep

     driver = webdriver.Chrome()
     driver.get('https://www.baidu.com/')
     a = "id1,kw"
     bp = Base(driver)
     bp.get_element(a).send_keys('11111')
     # bp.get_element("plink,地图").click()
     sleep(2)
     driver.quit()

 

●Common:用来放置一些公共的函数或方法文件,如前面封装的解析YAML文件、解析CSV文件的函数。

●Config:用来放置测试项目中的配置信息文件,如系统的IP地址、端口。

测试配置分离--使用yaml文件写入配置信息,在测试用例中读取配置,需要有对应的解析文件函数。

websites:
  host: localhost:81

 

 

●Data:用来放置CSV文件,内容是测试用例参数化用到的数据,也可以放置其他类型的数据文件,如Excel和JSON文件。

测试数据分离---将测试数据放在csv/yaml文件中,在测试用例文件读取测试数据进行参数化传入数据。

●Report:用来放置测试执行的报告。

●Test:用来测试相关文件,其中子目录PageObject用来存放页面对象,子目录TestCase用来放置测试用例。

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

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

相关文章

【iOS】—— 仿写知乎日报第一周总结

目录知乎日报第一周完成情况遇到的问题:1.线程问题:2.SDWebImage加载图片3.实现无限刷新界面4.点击主界面cell进入后的界面知乎日报第一周完成情况 在这周开始了仿写知乎日报的任务,在第一周里,我完成了主界面,以及滚…

新人入手mac折腾过程中遇到的解决方案

本文将长期更新,以记录个人的使用。 终端美化 …还没有美化完,不过推荐看这篇文章Mac终端美化指南 homebrew homebrew是Mac OS X上的强大的包管理工具,可以高效管理各种软件包,官方说法是:The missing package mana…

ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?

目录 01 如何新建图层组? 02 如何在图层组中添加数据 03 如何切换数据视图和布局视图 03 如何修改符号系统? 3.1 如何快捷的修改一下符号样式? 3.2 如何修改符号系统的色带 3.2.1 色带视图的取消 3.3 修改符号系统中的标注显示 3.4 如…

大气湍流退化图像复原技术研究及DSP实现

目录 第一章 绪论 1 1.1 研究背景 1 1.2 国内外研究现状 1 1.3 本文的研究内容 5 1.4 本文的组织结构 5 第二章 大气湍流退化图像复原技术 7 2.1 图像退化及复原数学模型概述 7 2.1.1 图像退化的数学模型 7 2.1.2 图像复原的数学模型 8 2.2 大气湍流退化图像概述 9 2.2.1 大气…

插件内存分析

rtspsrc 1. 当pipleline为rtspsrc加其他插件时,如果让其他插件卡主会发生什么事情呢?以rtspsrcfakesink为例(gst-launch-1.0.exe rtspsrc locationrtsp://xxx ! fakesink),修改fakesink的代码,让render中…

基于SSM的图书馆阅览室预约管理系统,高质量论文范例,可直接参考使用,附送源码、数据库脚本

目录 1.项目技术栈 2.适合对象 3.适合课题 4.项目功能概述 4.1 项目功能汇总 4.2 项目功能介绍 5. 高质量论文范例 6. 毕业设计撰写视频教程 6.部分运行截图 1.项目技术栈 前端必学三个基础,"HTML、CSS、JS",基本每个B/S架构项目都要…

C++【搜索二叉树】

目录 一、什么是搜索二叉树 二、搜索二叉树如何删除数据 删除的是叶子结点的情况 删除的结点下面仅有一个子节点(托孤)(要删除的结点只有一个孩子) 替换法删除 (要删除的结点有两个个孩子) 三、写一…

腾讯前辈熬夜肝了一个月整理的《Linux内核学习笔记》,啃完受益匪浅不走弯路

小编热衷于收集整理资源,记录踩坑到爬坑的过程。希望能把自己所学,实际工作中使用的技术、学习方法、心得及踩过的一些坑,记录下来。也希望想做Linux内核高级工程师的你一样,通过我的分享可以少走一些弯路,可以形成一套…

【数据结构】常见七大排序总结

目录 一、插入排序:直接插入排序【稳定排序方法】 二、插入排序:希尔排序【不稳定排序方法】 三、选择排序:直接选择排序【不稳定排序方法】 四、选择排序:堆排序【不稳定排序方法】 五、交换排序:冒泡排序【稳定…

基于单片机MC9S12XS128的两轮自平衡小车设计

目 录 1.绪论 1 1.1研究背景与意义 1 1.2两轮自平衡车的关键技术 2 1.2.1系统设计 2 1.2.2数学建模 2 1.2.3姿态检测系统 2 1.2.4控制算法 3 1.3本文主要研究目标与内容 3 1.4论文章节安排 3 2.系统原理分析 5 2.1控制系统要求分析 5 2.2平衡控制原理分析 5 2.3自平衡小车数学…

总结一下flex布局

flex布局 传统布局方案是基于盒状模型,依赖 display position float 方式来实现,灵活性较差;Flex是Flexible Box的缩写,意为”弹性布局”。Flex可以简便、完整、响应式地实现多种页面布局 CSS3 弹性盒子是一种一维的布局&…

[Spring MVC3]MyBatis详解

本章重点讲述了MyBatis映射器,对数据层进行的操作,建议本篇文章和Spring Boot的持久层相互比较来看会更加收获颇多Spring Boot持久层技术 本文需要使用到MVC第一讲的模板格式与配置情况,全部代码已经放在此博客中,Spring MVC1 目…

修改设备管理器的COM端口名称

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class{4d36e978-e325-11ce-bfc1-08002be10318}\0001] “InfPath”“oem53.inf” “InfSection”“CH341SER_Inst.NTamd64” “ProviderName”“wch.cn” “DriverDateData”hex:00,00…

计算机算法(二)——进入计算机世界

作者介绍: 📞作者:小刘在C站 📀每天分享课堂笔记 🌹夕阳下,是最美的绽放 瑞士著名的科学家Niklaus Wirth教授曾提出:数据结构算法程序。 数据结构是程序的骨 算法是程序的灵魂。 在生活…

【 C++11 】lambda表达式

目录 1、lambda表达式的引入 2、lambda表达式 lambda表达式的语法 lambda表达式捕捉列表说明 使用lambda表达式排序自定义类型 lambda表达式的底层原理 1、lambda表达式的引入 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法&…

asp.net图书馆借阅归还系统

图书管理系统既是完整的知识定位系统,又是面向未来互联网发展的信息管理模式。图书管理系统,是一套利用计算机信息网络技术,实现对引用、注释和参考图书的自动化处理和规范化管理,服务于教师,学生及各类科研人员的集成…

【C语言进阶考试】你是否真正学懂了C语言

目录 前言 🎒选择题【全面深度剖析】 📗考点一:无符号数unsigned的理解与应用 📕考点二:字符ASCII计算与转换的理解和应用 📙考点三:对位操作符的理解与应用 📘考点四&#xf…

docker mysql 主从配置

准备:一台装有docker的虚拟机或者服务器 拉取mysql镜像: docker pull mysql:5.6 启动两个mysql容器 master docker run -p 1006:3306 --name mysql_master -v F:/mysql/mysql_master/conf:/etc/mysql -v F:/mysql/mysql_master/logs:/logs -v F:/mys…

【1024 | 程序员节】浅谈前端开发中常用的设计模式——适配器模式、工厂模式、单例模式等

前言 博主主页👉🏻蜡笔雏田学代码 专栏链接👉🏻【前端面试专栏】 今天学习前端面试题相关的知识! 感兴趣的小伙伴一起来看看吧~🤞 文章目录设计模式设计模式分类工厂模式什么是工厂模式工厂模式好处单例模式…

I2C知识大全系列三 —— I2C驱动之单片机中的I2C

两种方式 单片机中的I2C驱动有两种方式。一种方式是用专用硬件I2C控制器实现,这种方式简单易行,品质也容易控制,只是会增加硬件成本方面的压力。另一种方式是用纯软件方式实现,这种方式几乎无硬件成本方面的考虑。 主要对比&…