大神绕道而行,自我小白的笔记,仅此

一、创建文件夹,创建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模型的更多相关文章

  1. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  2. Appium基于PO模型的自动化测试(Python)

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  3. selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装

    po模型设计思想 Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面 ...

  4. Appium+Python之PO模型(Page object Model)

    思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解.这里推荐大家 ...

  5. 【Selenium07篇】python+selenium实现Web自动化:PO模型,PageObject模式!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第七篇博 ...

  6. UI自动化学习笔记- PO模型介绍和使用

    一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...

  7. Selenium笔记:PO模型

    所有用到的页面都定义成一个类,继承自基础的Page类 把页面中用到的元素定义成方法 把页面上一些操作定义成方法

  8. Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  9. Selenium基于Python web自动化测试框架 -- PO

    关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...

随机推荐

  1. Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)

    目前,在Web API中没有简单的方法来记录或处理全局异常(webapi1中).一些未处理的异常可以通过exception filters进行处理,但是有许多情况exception filters无法 ...

  2. 信1705-2 软工作业最大重复词查询思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中。 (2)定义一个Map,key是字符串类型,保存单词;value是数字类型,保存该单词出现的次数。 (3)遍历(1)中得到的字符串数组,对于每一个单词,考察Map的key中是否出现过该单词,如果没出现过,map中增加一个元素,key为该单词,value为1(

    通过学习学会了文本的访问,了解一点哈希表用途.经过网上查找做成了下面查询文章重复词的JAVA程序. 1 思 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词 ...

  3. nginx url问题

    测试需求,url自动加/后,发现重定向不带端口,即为 test.a.com:3443/abc  nginx自动重定向301到 test.a.com/abc,端口消失. 分析可能和nginx默认配置se ...

  4. XDCTF网络安全大赛——Web100

    打开网址 http://game1.xdctf.com:8083/f16c3b1ed800fc78e605/index.php 网页中显示了一张图片,图片名为hackkey.png: 还有一段文字: ...

  5. Git 子模块:git submodule

    imtianx 2018年03月08日阅读 2057 Git 子模块:git submodule 工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景.比如,在项目中引用第三方库.或者 ...

  6. 无法跨越程序集边界使用程序集“DataCheck, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中的类型“List<ILayer>”,因为该类型有一个为嵌入互操作类型的泛型类型参数

    主窗体: FrmDataInspect f2 = new FrmDataInspect(listMapControl1Lyr); f2.Show(); 弹出的窗体: 应该改为: gListMapLyr ...

  7. PP图和QQ图 检查2个数据集是否符合同一分布

    1.QQ图检查2个数据集是否符合同一分布,Purpose:Check If Two Data Sets Can Be Fit With the Same Distribution PP图和QQ图 - ...

  8. disruptor的并行用法

    实现EventFactory,在newInstance方法中返回,ringBuffer缓冲区中的对象实例:代码如下: public class DTaskFactory implements Even ...

  9. json 脚本入库的几种方法

    json 脚本入库的几种方法,见代码: #-*- encoding: utf-8 -*- #第一种mongodb入库 # from pymongo import * # import json # c ...

  10. java JDBC (三) 修改

    package cn.sasa.demo3; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pr ...