POM应用
POM是业内公认最佳的UI自动化测试设计模式,POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。在这种模式下,应用涉及的每一个页面可以定义为一个单独的类。类中应该包含此页面上要操作的页面元素和页面上的操作过程等,我们可以将页面元素的定位方法看做该页面类的属性,页面上的操作过程看做页面类的方法。将流程所关联的页面作为对象,将一个一个对象串联起来后,可以形成一个个不同的业务流程。
页面对象代表 Web 应用程序的一部分。页面对象通过创建适合您的应用程序的更高级别的 API 来简化创作,并通过在一个地方捕获元 素选择器和创建可重用代码来避免重复来简化维护。
PO的核心就是分层思想,把同属于一个页面的元素都放在一个页面类中,有时候不同的页面上可能有一些都用到的元素,可以将这些公共的元素定位方法放到一个类中作为属性,其他页面类可以引用这个类中的元素。这样当元素的定位方法需要修改时只需要找到元素所在的类,修改一下就行了。
POM pag object model页面对象模型,web自动化框架广泛使用
设计思路:web项目是由很多页面组成,把每个页面当做页面对象来设计。
在本文中,我们将介绍如何使用Python和Page Object Model(POM)模式来编写Playwright自动化测试代码。我们将通过一个实例来演示如何使用Playwright和POM模式来测试一个Web应用程序。
我们以登录页面和修改密码为例来看一下POM的应用
我们先来看登录页面
我们需要为每个页面元素创建一个单独的类。在本例中,我们将创建一个名为Login_Page的类来表示登录页面,实现进入登录页面,输入账号密码点击登录这个过程。
实践代码:
# '''
# author=测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
import _44_aw as aw
from playwright.sync_api import Page,sync_playwright
class Login_Page():
def __init__(self,page:Page) -> None:
self.page=page
# 定义元素定位方法
self.username_input = '[name="loginId"]'
self.Password_input = '[name="password"]'
self.login_button = '#submit'
def goto_login_page(self):
#进入登录页面
self.page.goto("http://127.0.0.1:8080/oa/")
def login_system(self,username,password):
# 基于封装的AW进入系统
aw.locat_element_fill(self.page,self.username_input,username)
aw.locat_element_fill(self.page,self.Password_input,password)
aw.locat_element_click(self.page,self.login_button)
修改密码如下图是一个窗口,但是我们也可以把修改密码这个弹窗看做一个页面
在这个页面我们封装一个Modify_Password_Page类,在这个类中封装修改密码的过程,并且可以获取提示信息,写测试用例时可以以提示信息来断言。
实践代码:
# '''
# author=测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
import _44_aw as aw
from playwright.sync_api import Page,sync_playwright
class Modify_Password_Page():
def __init__(self,page:Page) -> None:
self.page=page
#定义需要操作的元素的定位方法
self.modify_password_link = 'text=密码修改'
self.Modify_Password_frame = 'iframe'
self.old_password_input = '#oldpassword'
self.new_password_input = '#newpassword'
self.password_again_input = '#passwordagain'
self.tipe_info_ele = '[style="max-width:440px;"]'
self.save_button = '[title="保存"]'
self.queding = '[value="确定"]'
def goto_modify_password_page(self):
#进入修改密码页面
aw.locat_element_click(self.page,self.modify_password_link)
def modify_password(self,oldpassword,newpassword,passwordagain):
# 基于封装的AW完成密码修改,并返回保存后的提示信息
aw.locat_frame_element_fill(self.page,self.Modify_Password_frame,self.old_password_input,oldpassword)
aw.locat_frame_element_fill(self.page,self.Modify_Password_frame,self.new_password_input,newpassword)
aw.locat_frame_element_fill(self.page,self.Modify_Password_frame,self.password_again_input,passwordagain)
aw.locat_frame_element_click(self.page,self.Modify_Password_frame,self.save_button)
tipe_info =aw.locat_element_get_text(self.page,self.tipe_info_ele)
aw.locat_element_click(self.page,self.queding)
return tipe_info
我们可以看到,每个类都有一个构造函数,它接受一个名为“page”的参数。这是Playwright提供的一个Page对象,它表示当前页面。我们可以使用该对象来访问页面元素和执行操作。
编写测试代码
# '''
# author=测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import Playwright, sync_playwright, expect
import pytest
from _44_login_page import Login_Page
from _45_modifypassword_page import Modify_Password_Page
class Test_Modify_Password():
def setup_class(self):
self.playwright = sync_playwright().start()
self.browser = self.playwright.chromium.launch(headless=False) #默认无头模式
self.context = self.browser.new_context() # 创建上下文,相当浏览器于实例化,即打开浏览器
self.page = self.context.new_page() # 打开一个新标签页
def teardown_class(self):
self.context.close()
self.browser.close()
self.playwright.stop()
def test_modify_password(self):
lp = Login_Page(self.page)
lp.goto_login_page()
lp.login_system('sup','s1234567')
mp = Modify_Password_Page(self.page)
mp.goto_modify_password_page()
tip_info = mp.modify_password('s1234567','s1234567','s1234567')
assert tip_info == '密码修改成功!'
if __name__=='__main__':
case_path = r'D:\jnc\自动化测试\playwright\playwright_project\test_modifypassword.py'
pytest.main(['-s',case_path])
我们可以看到,测试代码非常简单。测试运行成功,并输出了测试结果。
结论
在本文中,我们介绍了如何使用Python和POM模式来编写Playwright自动化测试代码。我们演示了如何将页面分解为多个小部件,并为每个小部件创建一个单独的类。然后,我们编写了测试代码,以模拟用户在Web应用程序中的操作。最后,我们运行了测试,并验证了测试结果。
Playwright是一个非常强大的自动化测试工具,可以帮助我们更快地完成测试工作,提高测试效率。使用Python和POM模式来编写Playwright自动化测试代码可以使代码更容易理解和维护。