python po设计模式_(Python)PO设计模式

无规矩不成方圆。编写代码也是,如果没有大概的框架,管理代码将会是一件很头疼的事。

先看看笔者以前写的python脚本:

如果只有一个用例,这样看着好像挺整洁的。但是当用例越来越多后,如果元素定位发生了改变,那你将要在多个类、多个方法中,去寻找那个元素,然后一个一个修改,这将耗费很多时间。

引入PO设计模式后,管理代码将会很轻松。

什么是PO设计模式?

PO设计模式是一种业务流程与页面元素操作分离的模式;这意味着,当UI发生变化,元素定位发生变化时,只需要在一个地方修改即可。

下面是代码目录:

页面元素的定位、封装写到pages模块中;业务流程的操作写到test_case模块中;run_main是执行所有用例。

其它如读取配置文件等,可另外写到models模块中。

模块下的文件如下:

models模块

configfile.cfg:#存储后台登录账号密码

[login]

username=adminpassword=admin

#平台地址

[platform]

url= http://ip/admin

读取文件(readconfig.py):

importConfigParserimportos

conf=ConfigParser.RawConfigParser()#读取文件

conf.read(os.path.join(os.getcwd(),'models\\configfile.cfg'))#账号、密码

username = conf.get("login", "username")

password= conf.get("login", "password")#url

url = conf.get("platform", "url")

Myunit.py:

from selenium importwebdriverimportunittestfrom models importreadconfigclassMyTest(unittest.TestCase):defsetUp(self):

self.driver=webdriver.Firefox()

self.driver.get(readconfig.url)

self.driver.maximize_window()

time.sleep(4)#self.driver.implicitly_wait(2)

deftearDown(self):

self.driver.quit()

pages模块

pages下的登录页面loginpage.py

from selenium.webdriver.common.by importByfrom pages.page importBasePageclassLoginPage(BasePage):'''用户登录页面'''

#元素集

#用户名

username = (By.NAME,"userName")#密码

passwd = (By.NAME,"password")#登录 按钮

loginbtn = (By.XPATH,"//form[@id='frmLogin']/div[2]/footer/button")definput_username(self,text):print u"输入用户名:",text

self.input_text(self.username, text)definput_passwd(self,text):print u"输入密码:",text

self.input_text(self.passwd, text)defclick_loginbtn(self):print u"点击 登录 按钮"self.click(self.loginbtn)

test_case模块

test_case下的登录操作logintest.py

from models.myunit importMyTestfrom models importreadconfigfrom pages.loginpage importLoginPageimportunittestimportos

#所有test类都继承MyTest类;

#每次执行xx_test方法时,会先执行MyTest中的setUp(),结束操作后再执行tearDown()classLoginTest(MyTest):'''登录测试'''

deftest_login1(self):'''用户名和密码都为空'''

try:

loginpage =LoginPage(self.driver)

loginpage.login_sys("", "")

self.assertEqual(loginpage.none_user_hint(), u"请输入用户名")

self.assertEqual(loginpage.none_passwd_hint(), u"请输入密码")exceptException as msg:print(u"异常原因:%s"%msg)

self.driver.get_screenshot_as_file(os.path.join(readconfig.screen_path,'login1.png'))raise Exception("false")

run_main

run_main.py:

importsys

reload(sys)

sys.setdefaultencoding('utf-8')importunittestimportHTMLTestRunnerfrom models importreadconfig

report_path=readconfig.report_pathif __name__ == '__main__':#suite = unittest.TestSuite()

#suite.addTest(TestAll('test_a'))

now = time.strftime("%Y%m%d%H%M%S",time.localtime(time.time()))

filename= report_path+now+'result.html'fp= open(filename,'wb')

runner= HTMLTestRunner.HTMLTestRunner(stream=fp,title='REPORT',description='RESULT')

discover= unittest.defaultTestLoader.discover("test_case",pattern="*test.py",top_level_dir=None)

runner.run(discover)

fp.close()

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

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

相关文章

php strtok函数,strtok函数的使用示例

strtok函数是字符串函数库中的一个函数,函数原型如下:char *strtok(char s[], const char *delim);作用:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。例如:"hello,hi:what?is!the.matter;&…

python 滑块验证码_python selenium 淘宝滑块验证码 问题

正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总是失败,无论是手动滑还是代码控制都不可以,目前正在找解决办法。。。此问题针对多次翻页出现的滑块验证码…

php框架m方法详细,Thinkphp框架中D方法与M方法的区别是什么

Thinkphp框架中D方法与M方法的区别是什么发布时间:2021-02-06 23:09:38来源:亿速云阅读:69作者:小新小编给大家分享一下Thinkphp框架中D方法与M方法的区别是什么,相信大部分人都还不怎么了解,因此分享这篇文…

vue created 调用方法_vue 基础-生命周期 lifecycle 的执行顺序和作用

前言《vue 基础》系列是再次回炉 vue 记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)平时开发中,我真的不太使用生命周期相关的方法。但必须明确的是&…

php 获取图片字节,php内置函数获取图片类型-exif_imagetype

在PHP获取图片类型可以使用PHP内置函数中的 exif_imagetype预定义常量定义有以下常量,并代表了 exif_imagetype() 可能的返回值:图像类型常量 值 常量1 IMAGETYPE_GIF2 IMAGETYPE_JPEG3 IMAGETYPE_PNG4 IMAGETYPE_SWF5 IMAGETYPE_PSD6 IMAGETYPE_BMP7 IM…

python谱聚类算法_谱聚类(spectral clustering)原理总结

谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。在处理实际的聚类问题时&…

php 获取文件大小 修改时建,php遍历目录输出文件大小,类型,修改时间.

$dir"C:/THsoft";//这是一个目录地址 也是根目录if (is_dir($dir)){//判断$dir是否是一个目录if ($dhopendir($dir)){//dh变量用来接收opendir的返回信息 如果为真 则执行whilewhile (($filereaddir($dh))!false){ //readdir()函数会返回一个文件的名称的echo …

vba 提取 json某个值_Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)...

各位朋友,你们好,今天和你们分享Excel中提取不重复值的几种方法,着重介绍【5种】基础操作方法,另外附送一个VBA去重代码,拿去就可以直接使用。一、基础操作方法1、数据工具直接去重(见下图)数据工具去重2、高级筛选(见…

mysql distinct 条件,多行条件下的mysql distinct列

我有一个mysql数据库(item_preset)与下表:--------------------------------| id | preset_id | item_id | value |--------------------------------| 1 | 1 | 1 | 2 || 2 | 1 | 2 | 1 || 3 | 1 | 4 | 60 || 4 | 1 | 3 | 16 || 5 | 1 | 3 | 17 || 6 | 1 | 3 | 18 |…

python time 语句_python的time模块总结

python的time模块与random模块目录time模块time模块三种时间表示在Python中,通常有这几种方式来表示时间:时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())…

mysql maxconnections 最大值,MySQL性能优化之max_connections配置参数浅析

MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100。本文将讲解此参数的详细作用与性能影响。与max_connections有关的特性MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,…

tomcat temp 大量 upload 文件_原创 | 浅谈URI中的任意文件下载

点击上方蓝字 关注我吧引言文件下载是比较常见的业务。常见的接口格式为/download?fileNamexxx.png,整个过程若没过滤目录穿越符号…/或者未对下载的路径进行处理限制。当传入的filename参数为../../etc/passwd即可穿越路径达到任意文件下载的效果。有些接口在尝试获取某一文件…

mysql编写函数 求1 n 偶数之和,编写求1 2 3 - n的函数.在main函数中调用该函数

输入两个正整数m,n,编写求阶乘的函数,计算m!/(n!*(m-n)!). C语言函数解答,谢谢.#includelongfactorial(intm,intn){longsum1,sum11;inti;if(m-n>n){for(im;i>m-n;i--)sum*i;for编写函数fun求1!2!3! …… n!的和,在main函中由键盘输入n值,并输出运算结果#includeintfun(in…

python range在for循环里的用法_PyThon range()函数中for循环用法

最初range和xrange都生成可以用for循环迭代的数字,然而在python2和3里实现方式并不完全一致,下面着重讲讲python3的range()函数for循环用法。1、函数语法range(start, stop, [step])2、参数说明start: 可选参数,计数从 start 开始。默认是从 …

matlab实现图像放大两倍,matlab图像处理基础知识0(双线性插值matlab实现--调整水平和垂直放大倍数)...

需求说明:图像处理FPGA实现前期算法准备当前算法:已通过matlab验证成功function scaler_bilinear()%-----------------------------0:配置输入输出--------------------------------m2; %放大或缩小的高度n2; %放大或缩小的宽度Iimread(F:ookDigital ima…

win10虚拟内存怎么设置最好_淘宝直通车时间段怎么设置?哪个时间段开最好?...

大家好,我是西瓜电商培训的子木。淘宝直通车一直都是商家们最受关注的一款推广工具,开过直通车的商家应该都知道在开直通车的时候是可以通过自己设定时间和金额的,所以很多商家可能会根据每天店铺的流量时间段来分析开车投入,商家…

php小于neq qe,PHP模板判断语句eq相等 ne、neq不相等, gt大于, lt小于

eq相等 ne、neq不相等, gt大于, lt小于 gte、ge大于等于 lte、le 小于等于 not非 mod求模 is [not] div by是否能被某数整除 is [not] even是否为偶数 is [not] even by $b即($a / $b) % 2 0 is [not] odd是否为奇 is not odd by $…

笔记本屏幕出现横条纹_笔记本支架+拓展坞+立式无线充:给你的桌面一个简单的品质升级...

一、写在前面如果每个女孩都想拥有一个自己的衣帽间的话,每个喜欢科技的男孩,都想拥有一个属于自己的书房或者说游戏间,而这其中书桌是陪伴我们最多的地方,怎么打造一个舒适好用的桌面,让桌面简单而有品质呢&#xff0…

excel 公式 单引号 concat_从Excel的数据类型说Python

转自:可乐的数据分析之路写在前面这节内容是python基础知识中的数据类型和运算符,可以回顾一下前两篇文章来复习一下:利用Excel学习Python:变量利用Excel学习Python:准备篇本来想分开写的,但发现好像分不开…

matlab slider不可移动,GUI界面能运行,但是_slider不能用,不能控制波长

下面是GUI的程序,在c的地方设置的是可见光的波长,但是lamda_slider不能进行控制,默认波长600e-9,运行后只有c [0 0 0;1 0 0]求解function varargout untitled(varargin)%UNTITLED M-file for untitled.fig% UNTITLED, by i…