selenium-web自动化(po模型)
什么是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模型)的更多相关文章
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- Selenium Web 自动化
1 Selenium Web 自动化 - Selenium(Java)环境搭建 2 Selenium Web 自动化 - 如何找到元素 3 Selenium Web 自动化 - Selenium常用A ...
- Selenium Web 自动化 - Selenium(Java)环境搭建
Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...
- Selenium Web 自动化 - 如何找到元素
Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏览器 ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- Selenium Web 自动化 - 项目实战(二)
Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...
随机推荐
- Go 接口-契约介绍
Go 接口-契约介绍 目录 Go 接口-契约介绍 一.接口基本介绍 1.1 接口类型介绍 1.2 为什么要使用接口 1.3 面向接口编程 1.4 接口的定义 二.空接口 2.1 空接口的定义 2.2 ...
- 一个java文件的JVM之旅
准备 我是小C同学编写得一个java文件,如何实现我的功能呢?需要去JVM(Java Virtual Machine)这个地方旅行. 变身 我高高兴兴的来到JVM,想要开始JVM之旅,它确说:&quo ...
- Python 在PDF中生成水印
前言 在PDF中插入水印是比较常用的一种功能.一般在生成比较重要的,或者需要注明版权.作者的文档时使用比较多. 这里我将分享一个通过python代码为PDF文档添加水印的办法(包括文本水印和图像水印) ...
- ASM字节码操作类库(打开java语言世界通往字节码世界的大门)
前言:授人以鱼不如授人以渔,应用asm的文章有很多,简单demo的也很多,那么ASM都具备哪些能力呢?如何去学习编写ASM代码呢?什么样的情景需要用到ASM呢?让我们带着这些问题阅读这篇文章吧. 这里 ...
- 【uniapp】【外包杯】学习笔记day06 | 微信小程序导航栏的制作并推送的到码云【黑】
先创建分支 格式化快捷键 shift+alt+f
- mysql数据库数据同步几种通用方法?
MySQL数据库数据同步的几种通用方法包括以下几个方面: 一.基于主从同步 主从同步是 MySQL 数据库最为常见和基本的同步方式,即其中一台 MySQL 服务器作为主服务器(Master),另外一台 ...
- 通信技术 Communication
缩写 全称 翻译 备注 I2C Inter-Integrated Circuit 集成电路总线 通信协议 SPI Serial Peripheral Interface 串行外设接口 通信协议 QSP ...
- C++ 邮件槽ShellCode跨进程传输
在计算机安全领域,进程间通信(IPC)一直是一个备受关注的话题.在本文中,我们将探讨如何使用Windows邮件槽(Mailslot)实现ShellCode的跨进程传输.邮件槽提供了一种简单而有效的单向 ...
- 7-8次PTA和期末成绩总结
(1)前言:总结之前所涉及到的知识点.题量.难度等情况 课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式(修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课 ...
- 【开源项目推荐】-支持GPT的智能数据库客户端与报表工具——Chat2DB
2023年是人工智能爆火的一年,ChatGPT为首的一系列的大模型的出现,让生成式人工智能彻底火了一把.但有人会说,GPT对于我们数据开发来说并没有什么作用啊? 今天为大家推荐的开源项目,就是GPT在 ...