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就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...
随机推荐
- [No0000113]Keyboard shortcuts for Windows Visual Studio Code
General 常用Ctrl+Shift+P, F1 Show Command Palette 显示命令行Ctrl+P Quick Open, Go to File… 快速打开Ctrl+Shift+N ...
- tfidf_CountVectorizer 与 TfidfTransformer 保存和测试
做nlp的时候,如果用到tf-idf,sklearn中用CountVectorizer与TfidfTransformer两个类,下面对和两个类进行讲解 一.训练以及测试 CountVectorizer ...
- arcengine实现右键菜单打开/关闭所有图层
参考资料: http://developer.51cto.com/art/201104/256774.htm 参照后自己做的: 关于右键菜单的几个有价值的网址: http://blog.csdn.n ...
- [development][C] linux 设置线程名称
两个API, 都是linux的. 不是POSIX, 是GNU? 傻傻搞不清楚. 1. pthread_setname_np / pthread_setname_np 2. ptctl 带 PR_GE ...
- RENAME方法进行分区改造
1.新建零时表 set time on timing on create table RPTUSER.RPT_TMP_10086BDL_bak ( HANDLEDATE DATE, TEL_CALLI ...
- 《linux 计划任务》- cron
一:什么是计划任务 - 你给手机定了一个闹钟,每天的 7:00 会准时响铃叫你起床,这实际上就是一个计划任务 - 所谓定时任务,就是在已经定好的特定时间去执行的事情. - Cron是一个[守护程序]用 ...
- Java问题汇总
一.java编译通过,为什么运行却提示找不到或无法加载主类 使用运行窗口编译通过,但运行提示 通过eclipse可以运行 原因:代码中有package javaLearn:编译时在javaLearn目 ...
- UI自动化遇到的问题
1.找不到元素:查看是否有[frame]或者[iframe]元素 2.click无响应:1)使用sendkeys(Keys.Enter) 还是无响应:使用js定位 3.弹框处理: 确认:switcht ...
- vim 私人快捷键备忘录
i 上 k 下 j 左 l 右 ( 上移一段 ) 下移一段 * 搜索关键字 d 删除 y 复制 p 粘贴 h 插入 H 头插 o 下开一行 O 上开一行 f 后跳指定关键字 F 前跳指定关键字 e 字 ...
- python练习题-day4
1.写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&q ...