Python自动化测试PO模型封装过程详解

在自动化中, Selenium 自动化测试中有一个名字经常被提及 PageObject( 思想与面向对象的特征相 同 ) ,通常 PO 模型可以大大提高测试用例的维护效率

优点:可重用,业务和对象分离,代码结构清晰,方便代码维护

核心要素

1. 在 PO 模式中抽离封装集成一个BasePage 类,该基类应该拥有一个只实现 webdriver 实例的属性

2. 每一个 page 都继承 BasePage ,通过 driver 来管理本 page 中元素,将 page 中的操作封装成一个个方法

3.TestCase 继承 unittest.Testcase 类,并依赖 page 类,从而实现相应的测试步骤

PO 实现进入百度页面输入数据后进入下一个页面

组织代码

 

1 :实现 BasePage

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains #鼠标操作

class BasePage():

    '''

    BasePage封装所有界面都公用的方法。

    例如driver,find_element等

    '''

    # 实例化BasePage类时,事先执行的__init__方法,该方法需要传递参数

    def __init__(self,driver,url):

        self.driver = driver

        self.base_url = url

    # 进入网址

    def get(self):

        self.driver.get(self.base_url)

    #元素定位,替代八大定位

    def get_element(self,*locator):

        return self.driver.find_element(*locator)

    #点击

    def left_click(self,*locator):

        ActionChains(self.driver).click(self.get_element(*locator)).perform()

    #输入

    def send_text(self,text,*locator):

        self.driver.find_element(*locator).send_keys(text)

    #清除

    def clear_text(self, *locator):

        self.driver.find_element(*locator).clear()

    # 表单切换

    def switch_iframe(self,*locator):

        self.driver.switch_to.frame(self.driver.find_element(*locator))

    #窗口切换

    def switch_window(self,n):

        self.driver.switch_to.window(self.driver.window_handles[n])

2 :实现 SearchPage

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

from selenium.webdriver.common.by import By

from base.base_page import BasePage

class SearchOne(BasePage):

    def __init__(self,driver,url):

        BasePage.__init__(self,driver,url)

    #进入百度

    def open_baidu(self):

        self.get()

    #输入数据

    def input_search_content(self,text):

        self.send_text(text,By.ID,"kw")

    # 点击按钮

    def click_baidu_search(self):

        self.left_click(By.ID, "su")

    def click_open_hao(self):

        self.left_click(By.XPATH,".//*[@id='1']/h3/a[1]")

3 :实现 TestCase

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import unittest

from selenium import webdriver

from page.page_one import SearchOne

from page.page_two import SearchTwo

class BaiBu(unittest.TestCase):

    @classmethod

    def setUpClass(cls) -> None:

        cls.driver = webdriver.Firefox()

        cls.driver.implicitly_wait(10)

    def test001(self):

        url="http://www.baidu.com"

        s = SearchOne(self.driver,url)

        s.open_baidu()

        s.input_search_content("123")

        s.click_baidu_search()

        s.click_open_hao()

        self.driver.switch_to.window(self.driver.window_handles[1])

    def test002(self):

        s=SearchTwo(self.driver,"")

        s.open_baidu_map()

    def tearDown(self) -> None:

    #      self.driver.quit()

        pass

if __name__ == '__main__':

    unittest.main()

PO 模式的优点

1:PO 提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰

2 :页面对象与用例分离,使得我们更好的复用对象

3 :可复用的页面方法代码会变得更加优化

4 :更加有效的命令方式使得我们更加清晰的知道方法所操作的 UI 元素

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化智慧工地管理云平台源码(人工智能、物联网)

​智慧工地优势:"智慧工地”将施工企业现场视频管理、建筑起重机械安全监控、现场从业人员管理、物料管理、进度管理、扬尘噪声监测等现场设备有机、高效、科学、规范的结合起来真正实现工程项目业务流与现场各类监控源数据流的有效结合与深度配合,…

【一周安全资讯1202】信安标委发布《网络安全标准实践指南—网络安全产品互联互通 告警信息格式》;网络安全纳入注册会计师考试科目

要闻速览 1、信安标委发布《网络安全标准实践指南—网络安全产品互联互通 告警信息格式》 2、南昌某高校学生个人信息在境外公开出售,警方抓获学校"内鬼" 3、网络安全纳入注册会计师考试科目 4、乌克兰情报机构网攻俄罗斯民航局,称俄民航业正…

合并一个文件夹下的多个txt文件,并对文本内容分列处理。

python 合并一个文件夹下的多个txt文件,并对文本内容分列。 原始文件: 最终结果: import pandas as pd import xlwt import pandas as pd from sqlalchemy import create_engine import pandas as pd import os import glob dirPath g…

【已解决】Win10端口被占用

​ 我总是在启动项目的时候失败,被告知端口号被占用,明明没有被占用(可能是系统卡了或者其它问题),但是又不想改端口号,或者重启电脑,那怎么办呢? 第一步:打开命令行窗口,以管理员…

mvc模式test

项目结构 Book.java package beans; public class Book {private Integer id;private String name;private double price;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(Strin…

不会代码(零基础)学语音开发(语音播报板载双按键状态)

这个例程实现语音播报VDB-150S语音开发板板载的按键开关SW1、SW2的按下情况。 语音开发板将板载的按键开关SW1、SW2的一端都接到了GND端,另一端分别连接到语音模块的GPIO_B0、GPIO_B1引脚,当按下SW1时GPIO_B0引脚会输入低电平,当按下SW2时GP…

老师可以做副业吗

当老师,除了教学工作之外,还可以怎样来丰富自己的职业体验和增加收入呢? 自媒体作者 许多教师选择成为自媒体作者,分享自己的教育心得、教学经验以及与学生相处的生活状态等。通过撰写文章、发布在社交媒体上,不仅可以…

Objaverse:大规模3D模型开放数据集

研究人员推出了 Objaverse,这是一个“包含文本描述的3D 对象的海量开放数据集”。 它包含大约 800 000 个 3D 模型以及文本描述。 Objaverse数据集可以从huggingface下载,并且是通过 Sketchfab(Epic Games 旗下的在线平台)上共享…

又有狗咬娃!江西8岁男童买早餐被狗扑咬,满脸血缝了90多针!

位于江西省吉安市吉安县实验小学门口,一名年仅8岁的男童在去买早餐的路上遭遇了一场恐怖的袭击。据报道,孩子是在清晨的买早餐路上被一只恶狗扑倒咬伤的,伤口深可见骨。 孩子的母亲悲痛欲绝地描述了当时的情景,孩子被咬伤后躺在地…

ky10 x86 一键安装wvp gb28181 pro平台

下载代码 git clone https://gitcode.net/zengliguang/ky10_x86_wvp_record_offline_install.gitfinalshell mobaxterm 修改服务器ip 查看服务器ip ip a 在脚本文件中修改服务器ip 执行安装脚本 切换到root用户 sudo su cd ky10_x86_wvp_record_offline_install/ sourc…

智能优化算法应用:基于黑寡妇算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黑寡妇算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黑寡妇算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑寡妇算法4.实验参数设定5.算法结果6.参考文献7.…

Git 应用 -- 多人协作开发场景1

目录 1. 既查看本地仓库的分支,又查看远程仓库的分支: git branch -a (但是远程的分支只能查看,不能直接切换到远程的分支上) 2. 本地的分支和远程的分支建立连接:git checkout -b [分支名] [要连接远程的…

B027-MySQL增强

目录 多表查询为什么要用多表查询?笛卡尔积和内连接消除笛卡尔积外键数据库内连接练习左连接查询和右连接查询等值连接out join自连接子查询 数据操作(DML)数据的插入数据的删除数据的修改 数据库的备份与恢复Dos命令行窗口导出Dos命令行窗口导入Navicat导出Navicat…

if与switch语句的运用—输出成绩

1.给出一个百分制成绩&#xff0c;要求输出成绩等级A、B、C、D、E。90分以上为A&#xff0c;81-89分为B&#xff0c;70-79分为C&#xff0c;60&#xff0d;69分为D&#xff0c;60分以下为E。 if语句实现 #include <stdio.h> int main() { int score; printf(&qu…

基于SSM的图书馆管理系统运行部署教程

基于SSM的图书馆管理系统运行部署教程 1、下载2、数据准备-导入sql文件3、项目导入idea4、项目运行5、测试6、日志乱码问题 1、下载 源码下载地址&#xff1a; https://download.csdn.net/download/weixin_44796239/85072348下载之后&#xff0c;会得到一个压缩包&#xff1a; …

LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】

LeetCode-470. 用 Rand7 实现 Rand10【数学 拒绝采样 概率与统计 随机化】 题目描述&#xff1a;解题思路一&#xff1a;首先说一个结论就是(rand_X() - 1) Y rand_Y() > [1,X*Y]&#xff0c;即可以等概率的生成[1, X * Y]范围的随机数&#xff0c;其实就像军训的时候报数…

抖店怎么对接达人带货?达人渠道整理,实操详解!

我是电商珠珠 很多人在抖店开通后&#xff0c;按照流程去正常的跑自然流量&#xff0c;再去找达人带货让自己店铺的流量增多&#xff0c;得到相应的曝光。 但是一些新手小白并不知道从哪去找达人&#xff0c;或者说不知道怎么去筛选达人。 一开始所有人都想着去找头部主播&a…

ubuntu启动kafka报错Could not create the Java Virtual Machine.

网上有两种方式&#xff0c;但是需要具体看自己的错误信息&#xff0c;我的错误信息如下: 这里大概是说要写入日志无权限&#xff0c;所以执行的时候&#xff0c;前面加一下sudo 执行成功。

阿里云语雀频繁崩溃,有什么文档管理工具是比较稳定的?

10月23 日14:00左右&#xff0c;蚂蚁集团旗下的在线文档编辑与协同工具语雀发生服务器故障&#xff0c;在线文档和官网都无法打开。直到当天晚上22:24&#xff0c;语雀服务才全部恢复正常。从故障发生到完全恢复正常&#xff0c;语雀整个宕机时间将近 8 小时&#xff0c;如此长…