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就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...
随机推荐
- 国庆JAVA作业
动手动脑1 运行enumtest.java程序我明白了JAVA中枚举类型,s和t不能引用同一个对象.不是原始对象,可以实现从字符串中的转换. 动手动脑2 原码就是符号位加上真值的绝对值, 即用第一位表 ...
- qs.parse()、qs.stringify()使用方法
qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 1. qs.parse()将URL解析成对象的形式 const Qs = require('qs'); let url ...
- centos7.2 nfs安装配置
nfs服务端 ip:192.168.1.16 1.yum -y install rpcbind nfs-utils 2.创建文件/etc/exports,内容如下 /mnt/ 192.168.1.0/ ...
- MySQL数据类型之字符串类型
CHAR(M) 分配固定长度的空间建(字节) VARCHAR(M)按照实际长度存储(占用的字节数是实际的长度加上1或者2)当M的值小于255时,加一. 当M的值大于255时,小于65532时,加 ...
- delphi中的 IntToHex()
Delphi 自带函数 IntToHex 功能说明:该函数用于将“十进制”转换成“十六进制”.该函数有二个参数.第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据. 参考实例 ...
- ECharts图形库
ECharts图形库百度的项目,图形的创建也比较简单,直接引用Javascript即可 1,引入<script src="{{ url_for("static",f ...
- fiddler抓包常用功能详解
一.基础部分: 1.设置代理ip及端口,tools --> telerik fiddler options --> connections -->勾选 “ Allow romote ...
- java 线程(四)线程安全 同步方法
package cn.sasa.demo2; import java.util.concurrent.ExecutionException; public class ThreadDemo { pub ...
- 【PyQt5-Qt Designer】浅谈关闭窗口
1.关闭全部窗口(主窗口+所有的子窗口) 在逻辑界面中写入 sys.exit(0) 2.关闭子窗口(其他窗口不关闭) self.close()
- win 右键菜单栏出现sublime打开方式
win + r 输入 regedit 看图操作