PO模型---软件测试相关

        UI 自动化测试脚本的编写不是多么艰巨的任务。只需要定位到元素,执行对应元素的操作即可,我们所能做的就是元素的定位,然后进行键盘输入或鼠标动作。就这个小程序而已,维护起来看起来是很容易的。但随着时间的迁移,测试套件将持续的增长。脚本也将变的越来越多。如果我
们需要维护 10 个页面,100个页面,甚至 1000 个呢?那么页面元素的任何改变都会让我们的脚本维护变得繁琐复杂,而且变得耗时易出错。那怎么解决呢? UI 自动化中,常用的一种方式,引入 Page Object(PO):页面对象模式来解决,po 能让我们的测试代码变得可读性更好,可维护性高,复用性高。

一、模型思想

        

         (1)Page Objects 模型(PO 模型)理解
                页面对象模型(PO)是一种设计模式。在 PO 下,应用程序的每一个页面都有一个对应的 page class每一个 page class 维护着该 web 页的元素集和操作这些元素的方法page class 中的方法命名最好根据对应的业务场景进行,例如通常登录后我们需要等待几秒钟我们可以这样命名该方法:waitingForLoginSuccess()。
        (2)PO 的代码目录组织示例

                        

         (3)PO 模型优势
                PO 提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变
得更加清晰。页面对象与用例分离,使得我们更好的复用对象。更加有效的命名方式使得我们更加清晰的知道方法所操作的UI 元素。例如我们要回到首页,方法命名为:getoHomePage(),通过方法名即可清晰的知道具体的功能实现。

二、PO 模型分层设计示例
        (1)分层设计
                Page 页面层:负责对某个页面元素定位和操作,各类操作可以写成函数
                Case 用例层:验证实际结果和预期结果是否一致

        (2)基础页面

# Page 类
class Page:
    # 初始化方法
    def__init__(self, driver,base_url="http://wwww.baidu.com"):
        self.driver = driver
        self.base_url = base_url
        self.timeout = 30
    # 定位元素的方法
    def find_element(self, *loc):
        return self.driver.find_element(*loc)
    # 输入数据的方法
    def input(self, loc, text):
        self.find_element(*loc).send_keys(text)
    # 点击元素的方法
    def click(self, loc):
        self.driver.find_element(*loc).click()
    # 获取页面标题的方法
    def get_title(self):
        return self.driver.title

        (3)搜索页面

from selenium.webdriver.common.by import By
from PODemo.pages.basePage import Page

# 搜索页面类
class SearchPage(Page):
    search_input = (By.ID, "kw")
    search_button = (By.ID, "su")
# 初始化方法
def__init__(self, driver,base_url="http://www.baidu.com"):
    Page.__init__(self, driver, base_url)
# 获取百度首页的方法
def getBaiduHomePage(self):
    print("打开首页", self.base_url)
    self.driver.get(self.base_url)
# 输入搜索内容
def input_search_text(self, text="PO模型"):
    print("输入搜索关键字:PO模型")
    self.input_text(self.search_input, text)
# 点击搜索按钮
def click_search_button(self):
    print("单击百度一下按钮")
    self.click(self.search_button)

        (4)测试搜索页面

import unittest
from selenium import webdriver
from time import sleep
from PODemo.pages.searchPage import SearchPage

# 测试类
class TestSearchCase(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
    def test_search(self):
        driver = self.driver
        url = "http://www.baidu.com"
        # 搜索关键词
        text = "PO模型"
        # 期望结果
        assert_title = "PO模型_百度搜索"
        # 实例化搜索页面类SearchPage
        search_page = SearchPage(driver, url)
        # 打开百度
        search_page.getBaiduHomePage()
        # 输入搜索关键词
        search_page.input_search_text(text)
        # 点击搜索
        search_page.click_search_button()
        sleep(3)
        # 断言是否成功
        self.assertEqual(search_page.get_title(), assert_title)
    def tearDown(self) -> None:
        sleep(3)
        self.driver.quit()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Web自动化测试中的PO模型可以按照以下步骤进行: 1. 了解PO模型:首先,了解PO(Page Object)模型的基本概念和原则。PO模型是一种测试设计模式,它将每个Web页面抽象为一个对象,并封装页面的元素和操作,以便于测试代码的编写和维护。 2. 掌握基本的Web自动化测试技术:熟悉使用Selenium WebDriver或其他类似的工具进行Web自动化测试。了解如何定位页面元素,执行操作和断言结果。 3. 创建Page Objects:根据应用程序的页面结构和功能,创建相应的Page Objects。每个Page Object代表一个页面,并包含该页面上的元素和相关的操作方法。 4. 组织测试代码:根据测试场景,组织测试代码并使用Page Objects进行操作。将测试步骤分解为不同的Page Objects,并使用这些对象来执行操作和验证结果。 5. 编写可维护的测试代码:根据PO模型的原则,编写可重用和可维护的测试代码。尽量避免在测试代码中直接使用原始的页面元素定位,而是通过Page Objects提供的方法来操作页面。 6. 实践和反馈:通过实践不断改进和优化你的自动化测试代码。根据实际情况,反馈给开发团队和测试团队,以便进一步改进应用程序和测试设计。 7. 持续学习:保持学习和关注最新的Web自动化测试技术和最佳实践。参加培训课程、阅读相关书籍和博客,与其他测试人员交流经验。 总之,通过理解PO模型的概念和原则,并结合实际的测试项目,逐步学习和应用PO模型,可以提高Web自动化测试的效率和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值