什么是po模型呢?简单理解就是:把每个页面当成一个对象,给这些页面当成一个类,主要就是完成元素定位和业务操作;把它和测试脚本区分开来,需要什么取这些页面类去调用即可。这样的好处在于页面元素发生变化时,只需要去维护页面类即可,其他部分就不用管。


PO:指测试页面和测试脚本分离,即页面封装成类,供测试脚本进行调用

项目架构如下:

base基类(所有页面公共方法的二次封装)

'''
所有页面公共方法的二次封装
在脚本中加入太多的sleep后会影响脚本的执行速度
driver:返回浏览器的一个实例
timeout:超时的总时长
poll_frequency:循环去查询的间隙时间,默认0.5s '''
from selenium.webdriver.support.wait import WebDriverWait class BaseAction():
'''
基类
'''
def __init__(self,driver):
self.driver = driver def find_element(self,feature,timeout=10,poll=2):
'''方法内部去调用系统的定位元素'''
return WebDriverWait(self.driver, timeout, poll).until(lambda x: x.find_element(*feature)) def send_keyword(self,feature,text,timeout=10,poll=2):
'''输入内容'''
self.find_element(feature,timeout,poll).send_keys(text) def get_text(self,feature,timeout=10,poll=2):
'''获取元素的文本内容'''
return self.find_element(feature,timeout,poll).text def click_element(self,feature,timeout=10,poll=2):
'''点击元素'''
self.find_element(feature,timeout,poll).click() def clear_element(self,feature,timeout=10,poll=2):
'''清空元素'''
self.find_element(feature,timeout,poll).clear() def get_element(self,feature,timeout,poll):
'''返回定位到的元素'''
return self.find_element(feature,timeout,poll)

页面元素查找类 page

'''
By是selenium中内置的一个class,在这个class中有各种方法来定位元素 '''
from selenium.webdriver.common.by import By
from base.base_action import BaseAction class AssignworkPage(BaseAction):
#一个def是一个动作我们在case中调用这个方法即可对页面进行操作 #点击作业中心
center_work = By.LINK_TEXT,'作业中心'
#点击布置作业
bz_work = By.XPATH,'//*[@id="app"]/main/div/div[2]/div[1]/div[1]/div/button[1]'
def click_centerwork(self):
self.click_element(self.center_work) def work_bz(self):
self.click_element(self.bz_work)

测试case类

import unittest,json
from time import sleep
from selenium import webdriver
from page.assign_homeorkpage import AssignworkPage
from selenium.webdriver.common.action_chains import ActionChains class Work_Build(unittest.TestCase):
def setUp(self):
str = ''
with open('../common/bk.json', 'r', encoding='utf-8') as f:
listCookies = json.loads(f.read())
cookie = [item["name"] + "=" + item["value"] for item in listCookies]
cookiestr = '; '.join(item for item in cookie)
# print(listCookies)
self.driver = webdriver.Chrome('../common/chromedriver.exe')
self.driver.get('url')
# driver.get('https://hte.hexfuture.net/#/inCourse/hte/')
for cookie in listCookies:
if 'expiry' in cookie:
del cookie['expiry']
self.driver.add_cookie(cookie)
self.driver.get('url') self.assign_Homeworkpage = AssignworkPage(self.driver) def tearDown(self):
sleep(3)
self.driver.quit() def test_successbuildwork(self):
'''布置作业主流程'''
#点击作业中心
self.assign_Homeworkpage.click_centerwork() # assert self.indexPage.get_start_go_to_class_text() == "开始上课" if __name__ == '__main__':
unittest.main()

base文件夹下存放着最基础的页面元素方法,例如get_element,send_keys,clear,click等页面操作事件

page文件夹则存放着在我们需要操作页面的操作的xpath事件,一个def是一个事件。例如点击作业中心

scripts下则只存放测试用例

selenium-web自动化(po模型)的更多相关文章

  1. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  2. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

  3. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  4. Selenium Web 自动化

    1 Selenium Web 自动化 - Selenium(Java)环境搭建 2 Selenium Web 自动化 - 如何找到元素 3 Selenium Web 自动化 - Selenium常用A ...

  5. Selenium Web 自动化 - Selenium(Java)环境搭建

    Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...

  6. Selenium Web 自动化 - 如何找到元素

    Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...

  7. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作  1.1 用webdriver打开一个浏览器  1.2 最大化浏览器&关闭浏览器 ...

  8. Selenium Web 自动化 - 项目实战环境准备

    Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG  1.1 安装TestNG  1.2 添加TestNG类库2 部署Maven  2.1 mav ...

  9. Selenium Web 自动化 - 项目实战(一)

    Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...

  10. Selenium Web 自动化 - 项目实战(二)

    Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (132)-- 算法导论11.2 4题

    四.用go语言,说明在散列表内部,如何通过将所有未占用的槽位链接成一个自由链表,来分配和释放元素所占的存储空间.假定一个槽位可以存储一个标志.一个元素加上一个或两个指针.所有的字典和自由链表操作均应具 ...

  2. 二分图--AcWing刷题

    S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1∼N. 他们之间的关系自然也极不和谐. 很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突. 我们用"怨气值"( ...

  3. classpath 和 classpath* 的区别

    classpath 和 classpath* 的区别 classpath 和 classpath* 是两种不同的类路径搜索模式,它们在寻找资源文件时有所不同: classpath:classpath ...

  4. 【UniApp】-uni-app概述

    前言 好,经过我们前面文章的编写,大家可以了解到微信小程序开发相关的知识,了解完了这个微信小程序开发和云开发之后,从这篇文章开始,我再来给大家写一下关于 Uniapp 的知识. 好,开始,那什么是 U ...

  5. [ABC283Ex] Popcount Sum

    Problem Statement Find the sum of popcounts of all integers between $1$ and $N$, inclusive, such tha ...

  6. [转载] Winform WebBrowser 使用 Edge 内核

    原文地址 C# 设置 WebBrowser 使用 Edge 内核_c# webbrowser 内核 - CSDN 博客 原文内容 1. 问题描述 用 C# 写了一个小工具, 需要显示网页上的内容, 但 ...

  7. ubuntu安装opencv的正确方法

    本文介绍的是如何安装ubuntu下C++接口的opencv 1.安装准备: 1.1安装cmake sudo apt-get install cmake 1.2依赖环境 sudo apt-get ins ...

  8. Chrome扩展的核心:manifest 文件(下)

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 在上篇和中篇中已经完成了对 manifest 文件中以下字段的解释: "manifest_ ...

  9. LeetCode 503:下一个更大的元素|| (单调栈 or 线段树)

    解题思路: 1.单调栈:因为是循环数组,因此把数组复制三遍,ans 数组复制为2倍长,维护一个单调非递增的栈,栈保存的元素是元组(a[i] , i ),如果后面的值有比栈顶元素的值大,栈顶元素出栈,更 ...

  10. 图扑物联 | WEB组态可视化软件

    01什么是组态? 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统(Distributed Control System),可理解为"配置"."设置" ...