多测师肖sir_高级金牌讲师_ui自动化po框架版本02

2023-11-11 02:20

本文主要是介绍多测师肖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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据