POM自动化设计模式

POM是目前业内公认最佳的一种设计模式。是专门用于对应制定系统来量身打造的一套测试框架。

全称叫做页面对象模型,是将系统以页面来进行区分。

举例:

你要实现一个用户信息修改的流程。

登录——进入个人中心——修改个人信息并保存——再重新查看个人信息详情

POM角度:

1. 进入登录页面,实现页面的核心流程

2. 进入个人信息页面,实现修改个人信息的操作

3. 进入个人信息页面,实现查看个人信息的操作

4. 校验修改结果是否成功

POM体系下,全程都是基于页面来考虑这个流程的执行连贯性,中间会关联多少页面,每个页面分别会执行哪些内容。

  1. POM结构设计与编码实现

1. 工程结构形态:

代码与数据分离

逻辑代码与测试代码分离

2. POM结构:

1. 基类:逻辑代码的部分,主要是生产一系列在页面对象中可以被调用的函数。本身作为一个工具库的存在。

2. 页面对象类:逻辑代码的部分。结合实际的项目,提取的所有可被自动化执行的页面。类中包含页面的核心元素与页面的核心流程。

3. 测试用例类:测试代码部分。用于拼接各类页面对象,实现最终的测试流程

4. 测试数据类:用于提取所有在实际测试过程中需要应用的数据内容。

  1. POM+UnitTest实现自动化测试

简单的POM的体系设计:请看源码

自动化测试的实现一定是要关联到核心业务来走的,没有关联业务的自动化是无法实现落地的。

  1. 结合数据驱动分离测试数据

DDT+Yaml或者是常规的DDT+DATA的形态来实现数据驱动。

一、基础配置内容 base,页面点击、输入、元素获取等方法

import time
class  BasePage:
    def __init__(self,driver):
        self.driver=driver
    #访问url
    def visit(self,url):
        self.driver.get(url)
    #元素定位
    def locator(self,loc):
        return self.driver.find_element(*loc)
    #输入
    def input(self,loc,text ):
        self.locator(loc).send_keys(text)
    #点击
    def click(self,loc):
        self.locator(loc).click()
    #等待
    def wait(self,loc):
        time.sleep(loc)

二、新建页面对象page_object

新建登陆页面对象LoginPage.py

from base.base_page import BasePage
from selenium.webdriver.common.by import By
class LoginPage(BasePage):
    url ="http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html"
    user = (By.NAME,'accounts')
    password = (By.NAME,'pwd')
    login_button=(By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[3]/button')
    def login(self,username,pwd):
        self.visit(self.url)
        self.input(self.user,username)
        self.input(self.password,pwd)
        self.click(self.login_button)

新建页面对象IndexPage.py 

from base.base_page import BasePage
from selenium.webdriver.common.by import By
class IndexPage(BasePage):
    url ="http://39.98.138.157/shopxo/index.php"
    search_input = (By.NAME,'wd')
    search_button = (By.ID,'ai-topsearch')
    login_button=(By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[3]/button')

    def search(self,text):
        self.visit(self.url)
        self.input(self.search_input,text)
        self.click(self.search_button )

三、数据管理data,变量数据存储在yaml文件中进行管理,新建user.yaml文件,在测试用例中通过file_data进行读取测试

-
  username: xxxxx
  password: '111111'

-
  username: admin
  password: '123456'

 四、测试用例实现test_case

import time
import unittest
from selenium import webdriver
from page_object.login_page import LoginPage
from page_object.index_page import IndexPage
#ddt 数据驱动模式
from ddt import ddt,file_data,data
@ddt
class TestCase(unittest.TestCase):
    @classmethod
    def  setUpClass(cls) ->None :
        cls.driver = webdriver.Chrome()
        cls.lp = LoginPage(cls.driver)
        cls.ip = IndexPage(cls.driver)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()
    #数据驱动,读取yaml 文件中数据
    @file_data('../data/user.yaml')
    def test1_login(self,username, password):
        self.lp.login(username, password)
        time.sleep(5)
    #@data  中数据直接被txt读取到 在同一个页面实现多次搜索
    @data('手机','衣服','耳机')
    def test2_search(self,txt):
        self.ip.search(txt)
        time.sleep(3)


if __name__ == '__main__':
    unittest.main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值