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,一经查实,立即删除!

相关文章

《扩散模型 从原理到实战》Hugging Face (三)

第四章 Diffusers 实战 安装Difffusers 库 pip install -qq -U diffusers datasets transformers accelerate ftfy pyarrow扩散模型调度器 from diffusers import DDPMScheduler noise_scheduler DDPMScheduler(num_train_timesteps1000)定义扩散模型 from diffusers impo…

二维码展示与下载

1. 二维码展示(前端展示) 基于vue-qr组件实现 下载vue-qr组件 npm install vue-qr --save页面vueqr组件导入 import VueQr from vue-qr;export default {components: {VueQr} }页面展示 <el

VS安装FFmpeg库

在Visual Studio中安装FFmpeg库通常涉及以下步骤: 下载FFmpeg:访问FFmpeg官网(https://ffmpeg.org/download.html)下载对应于您的操作系统的预编译二进制文件。 解压FFmpeg:将下载的压缩包解压到您选择的目录。 配置系统环境变量:将FFmpeg的bin目录添加到系统的PATH环境变…

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

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

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

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

MySQL----慢查询日志

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

Oracle Database 23ai 创建新用户

Oracle Database 23ai 创建新用户 1. 创建新用户2. 配置 cohere 认证 1. 创建新用户 sqlplus syslocalhost:1521/orclpdb1 as sysdbaCreate bigfile tablespace tbs100 Datafile bigtbs_f100.dbf SIZE 1G AUTOEXTEND ON next 32m maxsize unlimited extent management local …

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

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

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

数字孪生分为客户端版和web端版&#xff0c;开发引擎多种多用&#xff0c;本文重点分析web端版采用哪种引擎最合适&#xff0c; 贝格前端工场结合实际经验和网上主流说法&#xff0c;为您讲解。 一、数字孪生的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并一键完成模型推理、微调及部署的实践流程。 …

shader的优化,specialization constants

volkan specialization_constants 与Uniform buffer objects (UBOs) 和 Push constants不同的是 specialization constants 可以在shader编译前设置控制量&#xff0c;从而能够删除无用代码和静态展开循环( remove unused code blocks and statically unroll)。不但缩减shader…

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

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

MySQL入门学习.子查询.IN

IN 子查询是 MySQL 中一种常见的子查询类型&#xff0c;用于在查询中确定一个值是否在另一个查询的结果集中。IN 子查询的特点是简洁明了&#xff0c;它可以在一个查询中方便地检查一个值是否在一组值中&#xff0c;非常适用于需要进行条件验证或关联查询的情况。 在 MySQL 中&…