【playwright】新一代自动化测试神器playwright+python系列课程63_POM应用

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自动化测试代码可以使代码更容易理解和维护。

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值