多测师肖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

相关文章

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

mysql中的group by高级用法

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

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid