多测师肖sir_高级金牌讲师_ui自动化po框架版本02
ui自动化po框架版本02
一、
pages下的BasePage.py模块
'''
此模块是封装所有用例的基类
比如说:所有用例要用到的元素定位,以及输入框输入,点击,下拉等等公共方法
'''
import unittest #导入unittest 框架
from time import *# 调试代码
from selenium import webdriver
#driver = webdriver.Chrome()class BasePage(unittest.TestCase): #创建一个BasePage类,这个类继承unittest框架中TestCase这个类@classmethod #我们在Ui 自动化我们就是打开浏览器,,我们之前是把所有的浏览器都是同一个,我们创建类方法,def set_driver(cls,driver): #入参是一个driver对象,把创建好的driver对象传进来,变成BasePage这个类的属性#把传进来的谷歌浏览器对象作为当前类、基类属性,基类的变量cls.driver = driver #保证每一个用例用的是同一个driver@classmethoddef get_driver(cls): #单例设计模式 #创建好以后basepage来拿通过get_driver来都是同一个对象return cls.driver :#baidu_input=("id","kw")@classmethod#优点,把重复的代码都省了def find_element(cls,element): #定位元素的时候用到很多种方法type = element[0] #idvalue = element[1] #kwif type == "id":elem = cls.driver.find_element_by_id(value)elif type == "xpath":elem = cls.driver.find_element_by_xpath(value)elif type == "class":elem = cls.driver.find_element_by_class_name(value)elif type == "name":elem = cls.driver.find_element_by_name(value)elif type == "css":elem = cls.driver.find_element_by_css_selector(value)elif type == "link_text":elem = cls.driver.find_element_by_link_text(value)elif type == "partial":elem = cls.driver.find_element_by_partial_link_text(value)else:raise ValueError("plese input corrt paramters")return elem@classmethod #封装输入函数def sendKeys(cls,elem,text):return elem.send_keys(text)@classmethod #封装点击操作def click(cls,elem):return elem.click()@classmethoddef wait(cls,sec):'''封装一个隐式等待'''return driver.implicitly_wait(sec)@classmethoddef sleep(cls,sec):return sleep(sec)@classmethoddef frame(cls,elem):'''定位iframe框'''return cls.driver.switch_to.frame(elem)@classmethoddef outframe(cls):return cls.driver.switch_to.default_content()@classmethoddef get_text(cls,element):'''封装根据网页元素拿到text值'''value = BasePage.find_element(element).textreturn valueif __name__ == '__main__':from selenium import webdriver driver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.maximize_window()baidu_input = ("id","kw")elem = BasePage.find_element(baidu_input).send_keys("多测师")# elem = BasePage.find_element(baidu_input) #调用elem的返回值就得得到elem值# BasePage.sendKeys(elem,"多测师")
注意:1、点通过解释调试
2、调用的时候用类的方法注解:
unittest.TestCase的子类BasePage增加两个类方法:set_driver和get_driver
set_driver(cls, driver) 方法是用来设置driver属性的。这个方法接收一个driver参数,这个参数通常是一个webdriver对象(例如来自selenium库),然后把这个对象赋值给BasePage类的一个属性(也就是cls.driver)。这个方法通常在测试类的setup方法中被调用,以便在执行测试用例前准备好webdriver。
get_driver(cls) 方法是用来获取driver属性的。这个方法返回BasePage类的一个属性(也就是cls.driver)。这个方法通常在测试类的teardown方法中被调用,以便在执行测试用例后清理webdriver。
然而,这段代码中存在一个问题。set_driver和get_driver方法都是类方法,它们都需要一个cls参数。但是,在set_driver方法中,你并没有使用这个cls参数。如果你想在set_driver中使用cls参数,你可以像下面这样修改代码:=================================
下面我们写两条用例:登陆,用户中心我们先写登陆:```python
rom public.pages.BasePage import BasePage #导入BasePage ,基类,导入后我们在类中继承
from selenium import webdriver
from public.utiles.read_ini import read #导入read对象
import unittest
from public.pages.Pages_Element impor Pages_Element as purl = read.read_data_ini("test_data","url")
username = read.read_data_ini("test_data","username")
pwd = read.read_data_ini("test_data","pwd")class Test_login(BasePage): #定义一个登陆的类,我们要继承basepage 要导包,因为BasePage引入了unttest类 也就是爷爷类@classmethoddef setUpClass(cls) -> None: #类的开始driver = webdriver.Chrome() #创建一个唯一的driver,只能打开一次,我们保证后面的都引用同一个对象,类是可以传递的,BasePage.set_driver(driver) #我们继承的 BasePage,dirver当一个变量来传递,后面通过调用ge——driver@classmethoddef tearDownClass(cls) -> None:'''每次跑完用例等待3秒'''BasePage.sleep(3)def test_01_login(self):#1.拿到driver对象driver = BasePage.get_driver()driver.get(url)driver.maximize_window()driver.implicitly_wait(20)#2.输入用户名elem =BasePage.find_element(p.userName)BasePage.sendKeys(elem,username)#3.输入密码elem = BasePage.find_element(p.passWord)BasePage.sendKeys(elem,pwd)#4.点击登陆elem = BasePage.find_element(p.loginBtn)BasePage.click(elem)#5.断言value =BasePage.get_text(p.desktop)assert value=="我的桌面"if __name__ == '__main__':unittest.main()
注意:cls类方法, self 实例方法
相关文章:
多测师肖sir_高级金牌讲师_ui自动化po框架版本02
ui自动化po框架版本02 一、 pages下的BasePage.py模块 此模块是封装所有用例的基类 比如说:所有用例要用到的元素定位,以及输入框输入,点击,下拉等等公共方法import unittest #导入unittest 框架 from time import *# 调试代码…...
线性判别分析(Linear Discriminant Analysis,LDA)
Linear Discriminant Analysis(LDA) 输入: 原始数据$D((x_1,y_1),(x_2,y_2),...,(x_m,y_m)$ 、 类别标签$Y[y_1,y_2,...,y_n]$、 降维到的维度d输出: 投影矩阵W、投影后的样本$Z$、算法步骤: 1.计算类内散度…...
git的分支及标签使用及情景演示
目录 一. 环境讲述 二.分支 1.1 命令 1.2情景演练 三、标签 3.1 命令 3.2 情景演示 编辑 一. 环境讲述 当软件从开发到正式环境部署的过程中,不同环境的作用如下: 开发环境:用于开发人员进行软件开发、测试和调试。在这个环境中…...
深度解析找不到msvcp120.dll相关问题以及解决方法
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行,给用户带来很大的困扰。那么,如何解决msvcp120.dll丢失的问题呢?本文将为大家介绍…...
SQL Server 2022 安装步骤——SQL Server设置身份验证教程
目录 前言: 安装详细步骤: 第一步: 第二步: 第三步: 第四步: SQL Server 连接的方式: Window验证: SQL Server验证: 两者之间区别: 总结: SQL Server身份验证登录配置教程: 第一步: 第二步: 第三步: 番外篇: 前言: 本文讲解,如何安装SQL Server安…...
Maven各方面配置好了却无法显示版本
今天配置了maven环境,各方面都配置好了命令行却一直没办法显示maven的版本,原因 竟是两个JDK导致maven无法选择,因为maven依赖于JDK,导致在选择JDK的时候差生了二义 性,在环境变量里面删除不常用的JDK,只…...
Jdk 1.8 for mac 详细安装教程(含版本切换)
Jdk 1.8 for mac 详细安装教程(含版本切换) 官网下载链接 https://www.oracle.com/cn/java/technologies/downloads/#java8-mac 一、选择我们需要安装的jdk版本,这里以jdk8为例,下载 macOS 版本,M芯片下载ARM64版本…...
02MyBatisPlus条件构造器,自定义SQL,Service接口
一、条件构造器 1.MyBatis支持各种复杂的where条件,满足开发的需求 Wrapper是条件构造器,构建复杂的where查询 AbstractWrapper有构造where条件的所有方法,QueryWrapper继承后并有自己的select指定查询字段。UpdateWrapper有指定更新的字段的…...
c语言练习11周(6~10)
输入任意字串,将串中除了首尾字符的其他字符升序排列显示,串中字符个数最多20个。 题干 输入任意字串,将串中除了首尾字符的其他字符升序排列显示,串中字符个数最多20个。输入样例gfedcba输出样例gbcdefa 选择排序 #include<s…...
钉钉API与集简云无代码开发连接:电商平台与营销系统的自动化集成
连接科技与能源:钉钉API与集简云的一次集成尝试 在数字化时代,许多公司面临着如何将传统的工作方式转变为更智能、高效的挑战。某能源科技有限公司也不例外,他们是一家专注于能源科技领域的公司,产品包括节能灯具、光伏逆变器、电…...
C++算法:包含三个字符串的最短字符串
涉及知识点 有序集合 字符串 题目 给你三个字符串 a ,b 和 c , 你的任务是找到长度 最短 的字符串,且这三个字符串都是它的 子字符串 。 如果有多个这样的字符串,请你返回 字典序最小 的一个。 请你返回满足题目要求的字符串。…...
华为开源carbondata中的使用问题处理
carbondata中的使用问题处理 Q:什么是不良记录? A:由于数据类型不兼容而无法加载到CarbonData中的记录或为空或具有不兼容格式的记录被归类为不良记录。 Q:CarbonData中的不良记录存储在哪里? A:不良记录…...
AI:76-基于机器学习的智能城市交通管理
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...
区块链游戏,游戏开发
区块链游戏是一种基于区块链技术的新兴游戏类型,它具有去中心化、安全性高、透明度高、可追溯等特点。与传统的游戏开发相比,区块链游戏开发需要更多的技术和知识储备,同时也需要更加注重游戏本身的玩法和用户体验。 在区块链游戏中ÿ…...
单片机程序无法下载?
原因一:电源问题 电源可能是导致STM32微控制器无法下载程序的一个常见原因。确保电源稳定对于正常运行和下载程序至关重要。以下是一些电源问题: 1. 电源电压不足:如果STM32微控制器没有足够的电压供应,它可能无法正常工作或下载程…...
【数据库】【sql】如何用SQL实现跨行计算
【背景】 这里的跨行计算不是指整体聚合类的函数比如SUM等的功能,而是指递归算法。 比如我接到有需求,有一个结果字段需要是目前所有行该字段的和,这是属于递归类的算法,SQL中如何实现呢? 【方法】 可以使用窗口函数…...
Oracle(概念含安装)
Oracle是一种关系数据库管理系统(RDBMS),是由美国甲骨文公司(Oracle Corporation)开发的。它是一个客户端/服务器系统,可以在各种操作系统上运行,包括Windows、Linux和Unix等。Oracle的设计重点…...
P6入门:项目初始化4-项目详情之预算日志及汇总Budget
前言 使用项目详细信息查看和编辑有关所选项目的详细信息,在项目创建完成后,初始化项目是一项非常重要的工作,涉及需要设置的内容包括项目名,ID,责任人,日历,预算,资金,分类码等等&…...
CSS 中BFC是什么?
在CSS中,BFC(块级格式化上下文)是一个重要的概念,它对于理解和解决布局中的一些问题非常有帮助。本文将深入探讨BFC是什么,以及如何使用代码来详细解释BFC的概念和应用。 引言 在Web开发中,页面布局是一个…...
uniapp的几种跳转方式
1、UniApp是一个跨平台的应用开发框架,可以用于开发同时支持多个平台(如iOS、Android、H5等)的应用程序。在UniApp中,有多种方式可以实现页面之间的跳转。以下是其中一些常用的跳转方式: 页面跳转(navigat…...
Docker部署Ollama模型甭
前言 Kubernetes 本身并不复杂,是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps,这些基础组件简单直接,甚至显得有些枯燥。但后来我…...
南京旅行避坑!选本地地陪的真实经验分享
现代社会,大家压力都大,焦虑感如影随形,所以很多人都盼着旅行来给自己松松弦。我之前去南京自由行,就没请专业的本地陪同服务,结果那趟旅行简直是噩梦,比上班还累。出发前,我觉得自己做攻略能省…...
快速构建精简Windows 11系统:tiny11builder完整使用指南
快速构建精简Windows 11系统:tiny11builder完整使用指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否厌倦了臃肿的Windows 11系统࿱…...
西门子PLC1500大型程序:包含Fanuc机器人汽车焊装与多种智能通讯系统
西门子PLC1500大型程序fanuc机器人汽车焊装 包括1台西门子1500PLC程序,2台触摸屏TP1500程序 9个智能远程终端ET200SP Profinet连接 15个Festo智能模块Profinet通讯 10台Fanuc发那科机器人Profinet通讯 3台G120变频器Profinet通讯 2台智能电能管理仪表PAC3200 4个GR…...
那些你不知道自己需要监控的 Linux 暗坑期
我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是字…...
沃德绿世界系统小程序开发指南
沃德绿世界系统小程序的开发涉及多个环节,包括需求分析、功能设计、技术实现和上线运营。以下是关键开发步骤:需求分析与规划 明确小程序的定位和目标用户群体,梳理核心功能模块,如会员管理、商品展示、订单处理、积分兑换等。制定…...
高精度计算插件 decimal.js 处理 JS 浮点数精度问题(. + . !== .)美
1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...
Cogito 3B效果展示:中文技术博客自动续写+风格迁移(严谨→通俗/幽默)
Cogito 3B效果展示:中文技术博客自动续写风格迁移(严谨→通俗/幽默) 1. 开篇:当技术博客有了“灵魂” 你有没有遇到过这种情况?写技术博客时,思路卡壳,对着空白文档发呆半小时,一个…...
DVWA文件上传漏洞通关实录:从Low到High,手把手教你三种绕过姿势(附Burp Suite实战)
DVWA文件上传漏洞实战指南:从基础绕过到高级技巧 在Web安全领域,文件上传漏洞一直是最常见也最具破坏力的漏洞类型之一。DVWA(Damn Vulnerable Web Application)作为经典的漏洞练习平台,其文件上传模块设置了从低到高三…...
国产信创库fio破坏主备库以及备份故障处理--惜分飞傧
一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...
