PO模型
大神绕道而行,自我小白的笔记,仅此
一、创建文件夹,创建xxx.ini文件用来存放界面的定位元素,用 [界面_element]-->界面, 来划分界面界面元素,维护方便。定位元素的格式: user=name>username
user:定位元素的名称,自己起。name:定位元素的方法。> :分隔符。username:元素name的值
[login_element] #------->界面
username=name>j_username
login=id>imgLogin
loginerror=xpath>/html/body/div/div[2]/div/div[1]/div[3]/div[1]/div[1]/div/div/div[6]/div/span[1]
[yewu_element]
zhankaicaidan=class_name>z-west-exp
[jiemian_element]
caidan=xpath>//div[@class='z-borderlayout-icon z-west-exp']
[qiyun_login]
jihau=xpath>//div[contains(text(),'我的计划')]
二、创建工具文件夹,创建读取xxx.ini文件的方法代码如下:调用时:输入参数('界面','定位元素的名称'),返回结果:定位元素的方法>元素的值,如:
aa=ReadyuansuIni()
a=aa.get_ini('login_element','username')
print(a)
结果:
name>j_username
代码如下:
import configparser
class ReadyuansuIni:
def read_mulu(self):
read_yuansuini = configparser.ConfigParser()
read_yuansuini.read('文件路径\\xxx.ini',encoding="utf-8-sig") # 读取目录,可以用os
return read_yuansuini
def get_ini(self,byx,key):
if byx=='login_element':
return self.read_mulu().get(byx,key)
elif byx=='yewu_element':
return self.read_mulu().get(byx,key)
elif byx=='jiemian_element':
return self.read_mulu().get(byx, key)
elif byx=='qiyun_login':
return self.read_mulu().get(byx, key)
三、在工具文件夹中再创建定方法的py文件,封装读取元素用什么定位方法定位,
from 路劲 import ReadyuansuIni
class Getby:
def __init__(self,driver):
self.driver=driver
def get_element(self,bxy,key):
read_ini=ReadyuansuIni()
read_neirong=read_ini.get_ini(bxy,key)
fangshi = read_neirong.split('>')[0]
dingwei = read_neirong.split('>')[1]
if fangshi == 'id':
return self.driver.find_element_by_id(dingwei)
elif fangshi == 'name':
return self.driver.find_element_by_name(dingwei)
elif fangshi == 'class':
return self.driver.find_element_by_class(dingwei)
elif fangshi == 'xpath':
return self.driver.find_element_by_xpath(dingwei)
elif fangshi == 'class_name':
return self.driver.find_elements_by_class_name(dingwei) '''这点是有区别的,driver.find_elements 复数,注意'''
四、建立文件用来获取所有界面元素信息
from 路劲 import Getby
class Login_page:#获取登录界面的所有元素信息
def __init__(self,driver):
self.fangfa = Getby(driver)
def get_username_element(self):
return self.fangfa.get_element('login_element', 'username')
def get_password_element(self):
return self.fangfa.get_element('login_element', 'password')
def get_login_element(self):
return self.fangfa.get_element('login_element', 'login')
五、建立文件来操作界面元素
#coding=utf-8
from 路劲 import Login_page
class LoginHandle:#操作页面的元素
def __init__(self,driver):
self.login_page = Login_page(driver)
def send_username(self,user):
self.login_page.get_username_element().send_keys(user)
def send_password(self, password):
self.login_page.get_password_element().send_keys(password)
def click_login(self):
self.login_page.get_login_element().click()
def zhankai_caidan(self):
self.login_page.get_zhankai_elements()[0].click()
六、建立文件来组织业务
#coding=utf-8
from yemian_caozuocang_handle.login_handle import LoginHandleclass LoginBusiness:
def __init__(self,driver):
self.login_handle = LoginHandle(driver)
self.driver=driver
def login_pass(self,user,password):
self.login_handle.send_username(user)
self.login_handle.send_password(password)
self.login_handle.click_login()
七、case层
import unittest,time
from selenium import webdriver
import HTMLTestRunner
from yewucang_business.login_business import LoginBusiness
from log.get_log import log
log = log()
get_log = log.get_log()
class Tsetlogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(20)
self.driver.get('网址')
get_log.error('This is Chrome')
self.aa = LoginBusiness(self.driver)
def test01_pass(self):
self.aa.login_pass('admin','admin123')
time.sleep(0.5)
title = self.driver.title
if title!='网页title':
case_name = self._testMethodName
jietu_path = '路经 + '.png'
self.driver.save_screenshot(jietu_path) # 截图
self.assertEqual(title, '网页title')
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
zhixing_case = unittest.TestSuite()
zhixing_case.addTest(Tsetlogin('test01_pass'))
baogao = "路经\\report.html"
fp = open(baogao, "wb")
HTMLTestRunner.HTMLTestRunner(stream=fp,title="报告title",description=u"说明吧").run(zhixing_case)
这里我只举例说明这样就成功了,用例可以加,还有断言,相对而言try比较好点。这里面的异常处理没有加。
PO模型的更多相关文章
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- Appium基于PO模型的自动化测试(Python)
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装
po模型设计思想 Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面 ...
- Appium+Python之PO模型(Page object Model)
思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解.这里推荐大家 ...
- 【Selenium07篇】python+selenium实现Web自动化:PO模型,PageObject模式!
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第七篇博 ...
- UI自动化学习笔记- PO模型介绍和使用
一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...
- Selenium笔记:PO模型
所有用到的页面都定义成一个类,继承自基础的Page类 把页面中用到的元素定义成方法 把页面上一些操作定义成方法
- Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- Selenium基于Python web自动化测试框架 -- PO
关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...
随机推荐
- [No0000D8]rar合并到JPG.bat用图片隐藏文件
echo off cls echo 请拖入jpg图像文件后回车: set /p imagefile= echo 请拖入rar文件后回车: set /p rarfile= copy /b %imagef ...
- python中的os.path.dirname(__file__)的使用
在编程时,我们要获取当前文件所在的路径,以适合所有的工程,建立相对路径. python的os.path.dirname(__file__)非常好用,建议大家使用: import os FILE = o ...
- 是时候给Xcode瘦身了
我的Xcode 用的很久了,是从6.0之后一直慢慢升级来的. 最近CleanMyMac 一直提示磁盘空间不足... 扫描一下: 用户数据中竟然有接近17G的数据. 打开Finder使用快捷键comma ...
- shell 文件描述符
/tmp/test.sh > /tmp/test.log 2>&1 这个命令的意思是 前半部分是将shell的输出重定向到/tmp/test/log.默认是标准输出(stdout文 ...
- isinstance与type的区别
1.isinstance()内置函数 python中的isinstance()函数是python的内置函数,用来判断一个函数是否是一个已知类型.类似type. 2.用法: isinstance(obj ...
- Flink - FlinkKafkaConsumer010
Properties properties = new Properties(); properties.setProperty("bootstrap.servers", &quo ...
- MyBati__mapper 中取值(#{} 或${}) 以及 parameterType为(基本类型 或复杂类型)
参考资料: MyBatis学习笔记(三)——parameterType为基本类型时的使用方法 MyBatis的传入参数parameterType类型 1. MyBatis的传入参数parameterT ...
- centos所有版本下载源
http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso http://mirrors.yun-idc.com/ ...
- 使用Jersey上传文件
采用jquery.form.js异步上传图片,并结合<form>表单 <script type="text/javascript"> //采用jquery. ...
- 用canvas画三角形的方法
<canvas id="favoriteRectangle" width="30" height="30"></canva ...