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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值