• 软件测试/测试开发丨Web自动化 PageObject设计模式


    点此获取更多相关资料

    本文为霍格沃兹测试开发学社学员学习笔记分享
    原文链接:https://ceshiren.com/t/topic/27167

    一、page object 模式简介

    1.1、传统 UI 自动化的问题

    • 无法适应 UI 频繁变化
    • 无法清晰表达业务用例场景
    • 大量的样板代码 driver/find/click

    二、page object 设计原则

    2.1、POM 模式的优势

    • 降低 UI 变化导致的测试用例脆弱性问题
    • 让用例清晰明朗,与具体实现无关

    2.2、POM 建模原则

    • 字段意义

      • 不需要暴露页面内部的元素给外部
      • 不需要建模UI内的所有元素
    • 方法意义

      • 用公共的方法代表UI所提供的功能
      • 方法应该返回其他page object或者返回用于断言的数据
      • 同样的行为不同的结果可以建模为不同的方法
      • 不要在方法内断言

    2.3、POM 使用方法

    • 把元素信息和操作细节封装到 PageObject 类中
    • 根据业务逻辑,在测试用例中链式调用

    三、page object示例展示

    3.1、搜索场景:传统线性脚本(Python)

    • 传统测试用例
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    class TestSearch:
        def test_search(self):
            # 初始化浏览器
            self.driver = webdriver.Chrome()
            self.driver.get("https://xueqiu.com/")
            self.driver.implicitly_wait(3)
    
            # 输入搜索关键词
            self.driver.find_element(By.NAME, "q").send_keys("阿里巴巴-SW")
            # 点击搜索按钮
            self.driver.find_element(By.CSS_SELECTOR, "i.search").click()
            # 获取搜索结果
            name = self.driver.find_element(By.XPATH, "//table//strong").text
            # 断言
            assert name == "阿里巴巴-SW"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3.2、POM 脚本(Python)

    • 股票页面 PageObject
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    class SearchPage:
        __INPUT_SEARCH = (By.NAME, "q")
        __BUTTON_SEARCH = (By.CSS_SELECTOR, "i.search")
        __SPAN_STOCK = (By.XPATH, "//table//strong")
    
        def __init__(self):
            self.driver = webdriver.Chrome()
            self.driver.implicitly_wait(3)
            self.driver.get("https://xueqiu.com/")
    
        def search_stock(self, stock_name: str):
            self.driver.find_element(*self.__INPUT_SEARCH).send_keys(stock_name)
            self.driver.find_element(*self.__BUTTON_SEARCH).click()
            name = self.driver.find_element(By.XPATH, "//table//strong").text
            return name
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • PO 模式测试用例
    from onSelenium.fei.page_objects.search_page import SearchPage
    
    class TestSearch:
        def test_search(self):
            text = SearchPage().search_stock("阿里巴巴-SW")
    
            # 断言
            assert "阿里巴巴-SW" == text
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    记录--纯CSS实现骚气红丝带
    Java开发面试常见问题总结
    常用端口与udp协议
    数据库连接池之c3p0-0.9.1.2,线上偶发APPARENT DEADLOCK,如何解?
    【POJ No. 2449】 第K 短路 Remmarguts‘ Date
    mysql8.0出现“Public Key Retrieval is not allowed”错误
    Vue实现拖拽穿梭框功能四种方式
    初见QT,控件的基本应用,实现简单登录窗口
    20.Sleuth链路追踪(springcloud)
    企业OA与政务OA的区别
  • 原文地址:https://blog.csdn.net/Ceshiren666/article/details/132673551