news 2026/5/21 17:26:56

Python自动化测试学习-PO设计模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python自动化测试学习-PO设计模式

PO模式:Page Object,是一种页面对象设计模式,算是一种比较好的设计模式。在该设计模式中,功能类(PageObjects)所代表的是每个页面之间的逻辑关系。

PO设计模式
一、PO设计模式的优点

PO模式有以下优点:

1、可以减少了代码的重复编写。

2、PO模式把页面元素定位和业务操作流程分开,界面元素的变化则不需要修改业务逻辑代码。

3、 PO能提高代码的可读性,高复用性,可维护性。

二、非PO设计模式

为了更好地进行对比分析,我们先看看非PO设计模式:

test_logintest.py代码,直接执行所有的流程操作,不做任何封装

from time import sleep

import pytest

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

class Test_logintest():

def test_1(self): driver=webdriver.Firefox() driver.get("http://10.5.1.247/dvwa/login.php") sleep(1) driver.find_element_by_name("username").send_keys("admin") driver.find_element_by_name("password").send_keys("password") driver.find_element_by_name("Login").click() sleep(2) driver.find_element_by_link_text("XSS (Reflected)").click() sleep(2) driver.find_element_by_name("name").send_keys("nick") sleep(1) driver.find_element_by_xpath("//input[@value='Submit']").click() sleep(1)

ifname== ‘main’:

pytest.main(["-sq", "test_logintest.py"])

三、PO设计模式

接下来我们看看PO设计模式

基础层:打开浏览器、封装元素定位

BasePage.py代码:

from selenium.webdriver.common.by import By

class BasePage(object):

def __init__(self,driver,url=None): self.driver=driver self.url=url if self.url!=None: self.driver.get(self.url) def by_name(self,id): locator=(By.NAME,id) ele=self.driver.find_element(*locator) return ele def by_linktext(self,linktext): locator=(By.LINK_TEXT,linktext) ele=self.driver.find_element(*locator) return ele def by_xpath(self,xpath): locator=(By.XPATH,xpath) ele=self.driver.find_element(*locator) return ele

PO层:页面元素获取,页面基础操作

DvwaPage.py代码:

from time import sleep

from myPytest.test_case.BasePage import *

class DvwaPage(BasePage):

def usernameText(self): ele=self.by_name("username") return ele def passwordText(self): ele=self.by_name("password") return ele def linkText(self): ele=self.by_linktext("XSS (Reflected)") return ele def Submit(self): ele =self.by_name("Login") return ele def login_dvwa(self,username,password): self.usernameText().send_keys(username) self.passwordText().send_keys(password) self.Submit().click() sleep(2) def search(self,str): #这里是通过调用linkText方法 self.linkText().click() #这里是直接调用by_name函数 self.by_name("name").send_keys(str) sleep(1) # 这里是直接调用by_xpath函数 self.by_xpath("//input[@value='Submit']").click() sleep(1)

'

运行

运行

测试用例层:业务逻辑和数据驱动的执行

test_loginDvwa.py代码:

import pytest

from myPytest.test_case.DvwaPage import *

from selenium import webdriver

class Test_loginDvwa():

def test_login(self): self.driver=webdriver.Firefox() self.url="http://10.5.1.247/dvwa/login.php" username="admin" password="password" sr=DvwaPage(self.driver,self.url) sr.login_dvwa(username,password) sr.search("nick")

ifname== ‘main’:

pytest.main(["-sq", "test_loginDvwa.py"])

执行结果如下:

四、错误原因排查

我在执行代码时,会出现TypeError: ‘module’ object is not callable这个错误

程序代码 :

import pytest

from myPytest.test_case import DvwaPage

from selenium import webdriver

class Test_loginDvwa():

def test_login(self): self.driver=webdriver.Firefox() self.url="http://10.5.1.247/dvwa/login.php" username="admin" password="password" sr=DvwaPage(self.driver,self.url) sr.login_dvwa(username,password) sr.search("nick")

执行代码后会报错:

sr=DvwaPage(self.driver,self.url)

E TypeError: ‘module’ object is not callable

原因分析:

Python导入模块的方法有两种:import 模块 和 from 模块 import *,前者导入后,在使用时需加上模块名的限定,而后者则不需要。

解决方式:

from myPytest.test_case import DvwaPage

sr=DvwaPage.DvwaPage(self.driver,self.url)

from myPytest.test_case.DvwaPage import *

sr=DvwaPage(self.driver,self.url)

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 18:27:48

全网最全10个AI论文平台,本科生轻松搞定毕业论文!

全网最全10个AI论文平台,本科生轻松搞定毕业论文! AI 工具如何成为论文写作的得力助手 随着人工智能技术的不断发展,越来越多的学生开始借助 AI 工具来提升论文写作的效率和质量。对于本科生来说,毕业论文不仅是学业的重要环节&am…

作者头像 李华
网站建设 2026/5/2 20:49:45

校园二手图书网站springboot vue

目录校园二手图书网站系统概述核心功能模块技术创新点扩展性与优化开发技术核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/5/14 16:34:27

掌握大数据领域分布式存储的关键要点

掌握大数据领域分布式存储的关键要点 关键词:大数据、分布式存储、HDFS、数据分片、数据复制、一致性、CAP理论 摘要:本文深入探讨大数据领域中分布式存储系统的核心概念和关键技术要点。我们将从基础原理出发,逐步分析分布式存储系统的架构设…

作者头像 李华
网站建设 2026/5/21 12:56:06

2026最新!9个降AI率工具测评,本科生必看

2026最新!9个降AI率工具测评,本科生必看 为什么你需要这份2026降AI率工具测评? 随着高校和科研机构对AIGC检测技术的不断升级,论文中的AI生成痕迹越来越容易被识别。很多学生在提交论文前发现AI率高达50%以上,甚至超过…

作者头像 李华
网站建设 2026/5/20 21:42:07

【2026年-01期】RAG进化图

RAG 发展历程与关键演进RAG(Retrieval-Augmented Generation)是一种结合检索与生成的混合模型架构,其进化过程可分为几个关键阶段,反映了技术从基础到优化的迭代。基础架构阶段(2019-2020)Facebook AI Rese…

作者头像 李华
网站建设 2026/5/8 13:49:05

以下是常见排序算法的性能对比及选择依据总结

以下是常见排序算法的性能对比及选择依据总结:排序方法时间复杂度辅助空间稳定性直接插入O(n)O(1)稳定简单选择O(n)O(1)不稳定冒泡排序O(n)O(1)稳定希尔排序O(n^1.3)O(1)不稳定快速排序O(n log n) 平均O(log n)不稳定堆排序O(n log n)O(1)不稳定归并排序O(n log n)O…

作者头像 李华