ui自动化selenium,清新脱俗代码,框架升级讲解

一:简化

1. 新建common 包 新建diver.py

封装浏览器驱动类

from selenium import webdriverclass Driver():"""浏览器驱动类定义 一个【获取浏览器驱动对象driver的方法】。支持多种类型浏览器"""def get_driver(self,browser_type):if browser_type == 'chrome':self.driver = webdriver.Chrome()elif browser_type == 'Firefox':self.driver = webdriver.Firefox()# 最大化窗口、隐式等待、最大加载时长self.driver.maximize_window()self.driver.implicitly_wait(20)self.driver.set_page_load_timeout(20)   # 页面加载时长, 超时则停止,避免因页面加载过慢而拖延整个测试流程return self.driver

新建configs包,config.py

把超时时间,隐式等待时间写到配置里

两种写配置的方式,都行

# 页面允许超时时间   小技巧  按 ctrl +shift +U, 可以转大写
SET_PAGE_LOAD_TIMEOUT = 20# 默认浏览器类型
DEF_BROWSER_TYPE = 'chrome'

我用第二种方式,那么在driver.py 中,就这么导入

from configs.config import SET_PAGE_LOAD_TIMEOUT,DEF_BROWSER_TYPE

 driver.py 中,引入config的配置的时间,引用config中配置的浏览器类型

from selenium import webdriver
from configs.config import SET_PAGE_LOAD_TIMEOUT,DEF_BROWSER_TYPE
class Driver():"""浏览器驱动类定义 一个【获取浏览器驱动对象driver的方法】。支持多种类型浏览器"""def get_driver(self,browser_type = DEF_BROWSER_TYPE):if browser_type == 'chrome':self.driver = webdriver.Chrome()elif browser_type == 'Firefox':self.driver = webdriver.Firefox()# 最大化窗口、隐式等待、最大加载时长self.driver.maximize_window()self.driver.implicitly_wait(20)self.driver.set_page_load_timeout(SET_PAGE_LOAD_TIMEOUT)   # 页面加载时长, 超时则停止,避免因页面加载过慢而拖延整个测试流程return self.driver

2. 新建页面基类

common包中,新建basePage.py  ,  BasePage类

表示页面基类, 把不同的页面,能做的同样的事情,都封装在这个类中

from common.driver import Driverclass BasePage:"""页面基类:不同的页面 能做同样的事,封装在这个类中打开浏览器、进入页面、定位元素、点击、输入等"""def __init__(self):self.driver = Driver().get_driver()     # 这个就表示打开浏览器# 打开网址def open_url(self,url):             # 二次封装,提供更多的可能性self.driver.get(url)# 定位到元素def get_element(self,locator):""":param locator:  如: 'id','kw':return:"""return self.driver.find_element(*locator)# 输入文本def input_text(self,locator,text,append=False):# 默认:清空后输入if not append:self.get_element(locator).clear()self.get_element(locator).send_keys(text)# 否则是追加输入else:self.get_element(locator).send_keys(text)# 返回driver对象, 让页面对象灵活操作def new_Driver(self):return self.driver# 倒退def back(self):self.driver.back()

3.新建pages包

一个页面一个py文件, 在pages目录下,

新增baidu_page.py

表示 百度的页面,里面

有纯元素,比如下面的  “【百度一下】  按钮元素

有元素做动作的方法,“输入框输入文本

在main中,可以进行调试

from common.basePage import BasePage# 继承基类
class BaiduPage(BasePage):def open_baidu_page(self):# self.open_url(f"{URL}/login")self.open_url("https://www.baidu.com/")return self     # 返回后,可以链式调用     BaiduPage().open_baidu_page().login_polly('花西子262','123456')# (动作)输入框输入xxdef input_ele_input(self,text):self.input_text(('id','kw'),text)# (元素) 百度一下 按钮def submit_ele(self):return  self.get_element(('id','su'))Baidu_Page_Obj = BaiduPage()if __name__ == '__main__':Baidu_Page_Obj = BaiduPage()# 输入Baidu_Page_Obj.open_baidu_page().input_ele_input("测试一下")# 点击确定Baidu_Page_Obj.submit_ele().click()

新建sahitest_page.py

再新增一个页面,其中,封装了两个元素

main 中

  1. 点击一个元素,然后 使用 basePage中封装的 back方法,回退
  2. 再点击另一个元素,使用basePage中,先获取到driver,然后再用driver
import time
from common.basePage import BasePage
# 继承基类
class SahiTestPage(BasePage):def open_sahi_page(self):self.open_url("https://sahitest.com/demo/")return self# (元素1)def _ele1(self):return  self.get_element(("link text",'Drag Drop Test'))# (元素2)def _ele2(self):return  self.get_element(("link text",'Alert Test'))sihi_Page_Obj = SahiTestPage()if __name__ == '__main__':sihi_Page_Obj = SahiTestPage()# 打开网址sihi_Page_Obj= sihi_Page_Obj.open_sahi_page()# 点击一个元素sihi_Page_Obj._ele2().click()time.sleep(2)# 回退  (使用封装的back方法)sihi_Page_Obj.back()# 点击第二个元素sihi_Page_Obj._ele1().click()time.sleep(2)# 回退(使用dirver对象 的)sihi_Page_Obj.new_Driver().back()

4 . 新建testCases包。

新建test_demo1.py 

一个py文件就用来写一个 页面的测试用例,可以这么设计,那这个就写百度页面的测试用例。

我就直接两个用例,对应两个页面了

  • 用例1: 百度页面  输入 CSDN,百度一下
  • 用例2: sahitest页面,点击一个, 回退,点击另一个,再回退
from pages.baidu_page import Baidu_Page_Obj
from pages.sahitest_page import sihi_Page_Obj
import time,pytestclass Test_Demo():def test_case1(self):"""打开百度"""Baidu_Page_Obj.open_baidu_page().input_ele_input("CSDN")Baidu_Page_Obj.submit_ele().click()time.sleep(1)def test_case2(self):"""打开sihitest网页"""time.sleep(1)sihi_Page_Obj.open_sahi_page()# 点击一个元素sihi_Page_Obj._ele2().click()time.sleep(2)# 回退  (使用封装的back方法)sihi_Page_Obj.back()# 点击第二个元素sihi_Page_Obj._ele1().click()time.sleep(2)# 回退(使用dirver对象 的)sihi_Page_Obj.new_Driver().back()if __name__ == '__main__':pytest.main([__file__])

pytest的知识,要执行main中的代码要设置pycharm:不明白可以看 【自动化总结1】pytest使用整理

执行时,会完成测试用例 ,但是会打开两个浏览器。这个是可以去解决的问题 

二:升级(待整理)

集中管理元素定位、解决打开多个浏览器问题(如果只打开一次,就只登录一次就够了) 

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

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

相关文章

JimuReport 积木报表 v1.7.6 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完…

Python构造TCP三次握手、传输数据、四次挥手pcap数据包并打乱顺序

Python构造数据包,包含: TCP三次握手、 传输数据、 四次挥手 实现 随机乱序TCP数据包 from scapy.all import * from scapy.all import Ether, IP, TCP, UDP, wrpcap from abc import ABC, abstractmethod import random import dpkt from scapy.all…

6月18日(周二)美股行情总结:纳指七日连创新高,英伟达市值全球第一,苹果微软回落,油价七周最高

美国5月零售销售意外走软,尽管一众美联储官员均鹰派发声支持多等待通胀数据再做决策,市场仍抬升对年内降息两次的押注。标普500指数在七天里第六天上涨并再创新高,标普科技板块连续七天创新高、期间累涨8.6%,道指一周高位&#xf…

MySQL----慢查询日志

慢日志 MySQL可以设置慢查询日志,当SQL执行的时间超过我们设定的时间,那么这些SQL就会被记录在慢查询日志当中,然后我们通过查看日志,用explain分析这些SQL的执行计划,来判定为什么效率低下。 查看相关信息 show va…

iOS 18 终于更新了 iOS 隐藏 App 功能,这次是真的隐藏

如何锁定或隐藏 App 我们一起来看看 iOS 如何隐藏软件,下面是具体的操作步骤: iOS 隐藏 App 的第一步肯定是找到你想隐藏或锁定的应用程序,然后长按它的图标,在长按之后出现的选项中我们选择“需要 Face ID”。 然后在新弹出的选…

web版的数字孪生,选择three.js、unity3D、还是UE4

数字孪生分为客户端版和web端版,开发引擎多种多用,本文重点分析web端版采用哪种引擎最合适, 贝格前端工场结合实际经验和网上主流说法,为您讲解。 一、数字孪生的web版和桌面版 数字孪生的Web版和桌面版是数字孪生技术在不同平台…

Mamba: Linear-Time Sequence Modeling with Selective State Spaces论文笔记

文章目录 Mamba: Linear-Time Sequence Modeling with Selective State Spaces摘要引言 相关工作(SSMs)离散化计算线性时间不变性(LTI)结构和尺寸一般状态空间模型SSMs架构S4(补充)离散数据的连续化: 基于零阶保持技术做连续化并采样循环结构表示: 方便快速推理卷积结构表示: 方…

对SpringBoot入门案例的关键点

我们SpringBoot的入门案例中&#xff0c;即做了两个重要工作&#xff1a; 配置pom.xml文件写启动类 1.pom.xml依赖配置文件 ①帮助我们进行版本控制的父模块 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

Inpaint_2024软件最新版下载-inpaint下载安装2024-inpaint下载最新版本

众多使用者向我们证明了高效去除背景无关游客&#xff0c;只需要花费几秒钟在照片上选择不必要的对象或人员&#xff0c;剩下的交给Inpaint。准确来讲快速去水印&#xff0c;用Inpaint,选中水印&#xff0c;一键清除&#xff0c;还你一个干净整洁的图形。我们都知道快速去水印&…

【2024】kafka streams的详细使用与案例练习(2)

目录 前言使用1、整体结构1.1、序列化 2、 Kafka Streams 常用的 API2.1、 StreamsBuilder2.2、 KStream 和 KTable2.3、 filter和 filterNot2.4、 map 和 mapValues2.5、 flatMap 和 flatMapValues2.6、 groupByKey 和 groupBy2.7、 count、reduce 和 aggregate2.8、 join 和 …

基于EasyAnimate模型的视频生成最佳实践

EasyAnimate是阿里云PAI平台自主研发的DiT的视频生成框架&#xff0c;它提供了完整的高清长视频生成解决方案&#xff0c;包括视频数据预处理、VAE训练、DiT训练、模型推理和模型评测等。本文为您介绍如何在PAI平台集成EasyAnimate并一键完成模型推理、微调及部署的实践流程。 …

【Python特征工程系列】基于方差分析的特征重要性分析(案例+源码)

这是我的第304篇原创文章。 一、引言 方差分析&#xff08;Analysis of Variance&#xff0c;简称ANOVA&#xff09;是一种统计方法&#xff0c;用于比较两个或多个组之间的平均值是否存在显著差异。 方法简介&#xff1a; ANOVA 通过分解总方差为组间方差和组内方差&#x…

怪物猎人物语什么时候上线?游戏售价多少?

怪物猎人物语是一款全新的RPG游戏&#xff0c;玩家在游戏中将化身为骑士&#xff0c;不断与怪物建立羁绊、不断成长&#xff0c;踏上前往外面世界的旅程&#xff0c;且最终目的地是以狩猎怪物为生的猎人世界。因为最近有不少玩家在关注这款游戏&#xff0c;所以下面就给大家分享…

上位机图像处理和嵌入式模块部署(h750 mcu中的pwm控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓的pwm&#xff0c;其实就是方波。我们都知道&#xff0c;对于一个电机来说&#xff0c;如果插上正负极的话&#xff0c;那么电机就会全速运转。…

leetcode (top100)盛最多水的容器

题目&#xff1a; 题解&#xff1a; 第一种可行的方案&#xff1a; 设置左指针指向第一条线&#xff0c;设置右指针指向最后一条线。每次向中间移动两条线中最短的一条&#xff0c;计算移动过程中最大接水量。 本题可以看出影响接水量的有两个因素&#xff0c;两条线的距离&…

PHP反序列化

PHP反序列化 什么是反序列化操作&#xff1f; 类型转换 - PHP & JavaEE & Python&#xff08;见图&#xff09; 序列化&#xff1a;对象转换为数组或字符串等格式 反序列化&#xff1a;将数组或字符串等格式转换成对象 serialize() //将对象转换成一个字符串 un…

配置小程序

小程序配置 1.全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。 完整配置项说明请参考小程序全局配置 以下是一个包含了部分常用配置选项的 app.json &#xff1a; {&q…

聚观早报 | 小米15配置规格曝光;比亚迪车险开售

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月19日消息 小米15配置规格曝光 比亚迪车险开售 真我GT6细节曝光 极星汽车加速全球扩张 Model 3高性能版开启交…

windows anaconda 安装 Labelme

安装 # 创建环境 conda create -n labelme python3.6 #激活环境 conda activate labelme # 安装依赖 conda install pyqt conda install pillow # 安装labelme conda install labelme3.16.2 # 启动labelme labelme右键选择标注类型&#xff0c;从上到下为多边形&#xff08;常…

计算机的五大功能部件应用及特点

目录 计算机的五大功能部件 1.现代计算机的结构 2.主存储器 ​​​​​​​ 3.运算器 4.控制器 5.各部件的特点 5.1主存特点 5.2外存特点 5.3运算器特点 5.4控制器特点 计算机的五大功能部件 1.现代计算机的结构 一般将运算器和控制器集成到同一个芯片上&#xff…