栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python+selenium实战搭建PO模型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python+selenium实战搭建PO模型

设计PO模式的方法:
页面对象模型(POM)是一种设计模式,用来管理维护一组web元素集的对象库。
1.基础层base:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。
2.PO层:元素定位、获得元素对象,页面动作。
3.测试用例层:业务逻辑,数据驱动。
三者的关系:PO层继承基础层,测试用例层调用PO层。

案例:非PO模式下有如下百度搜索脚本,如何把这个脚本改为PO模式实现?

# coding = utf-8

import unittest
from selenium import webdriver


class TestCaseBaidu(unittest.TestCase):
    def test01(self):
        '''case1:打开百度,搜索自动化测试'''
        driver = webdriver.Chrome()
        driver.get('https://www.baidu.com/')
        driver.find_element_by_id('kw').send_keys('自动化测试')
        driver.find_element_by_id('su').click()

    def test02(self):
        '''case2:打开百度,搜索python'''
        driver = webdriver.Chrome()
        driver.get('https://www.baidu.com/')
        driver.find_element_by_id('kw').send_keys('python')
        driver.find_element_by_id('su').click()


if __name__ == '__main__':
    unittest.main()

1、基础层:base
封装元素定位,元素等待,输入,点击等操作。

base.py脚本如下:

# coding = utf-8

class Base:
    '''第一步:构造方法初始化浏览器    让页面类,用例类都公用这一个浏览器'''
    def __init__(self, driver):
        self.driver = driver

    '''第二步:封装常见的操作'''
    # 元素定位
    def local_ele(self, loc):
        return self.driver.find_element(*loc)

    # 发送文本
    def ele_sendkeys(self, loc, value):
        self.local_ele(loc).send_keys(value)

    # 点击
    def ele_click(self, loc):
        self.local_ele(loc).click()

    #关闭浏览器
    def close_browser(self):
        self.driver.quit()

2、PO层:pagecalss
PO层:每一个页面是一个pageclass,主要实现元素定位属性信息、业务操作方法封装。
第一步:将百度搜索界面的元素抽离出来(定位的方式、定位的值);
第二步:将元素的操作方法抽离出来;
第三步:将业务操作抽离出来(经常操作的业务绑定在一起)。

baidu_Home.py脚本如下:

# coding = utf-8

from selenium.webdriver.common.by import By
from base import Base
import time

'''# 继承Base,可以直接使用Base中的self.driver'''
class BaiduHome(Base):
    '''元素定位方式和属性值'''
    search_input = (By.ID, 'kw')
    search_btn = (By.ID, 'su')

    '''元素操作方法'''
    '''调用base的Base类中封装的元素定位方法'''
    # 百度搜索框输入方法
    def input_search_input(self, value):
        self.ele_sendkeys(BaiduHome.search_input, value)

    # 百度按钮点击方法
    def click_search_btn(self):
        self.ele_click(BaiduHome.search_btn)

    '''业务操作'''
    def search_baidu(self, value):
        self.input_search_input(value)
        time.sleep(2)
        self.click_search_btn()

3、测试用例层:testcaseclass
用例层的testcaseclass中导入base文件的Base类,并继承Base,并且在testcaseclass中实例化PO层pageclass直接会调用其父类Base类的构造方法。

testcase_baidu.py脚本如下:

# coding = utf-8
# Author: wh
# Date: 2022/4/23 17:08

import unittest
from selenium import webdriver
from baidu_Home import BaiduHome
from base import Base

# 继承Base
class BaiduTest(unittest.TestCase, Base):

    def setUp(self) -> None:
        driver = webdriver.Chrome()
        driver.get('https://www.baidu.com/')
        # 实例化对象,会自动调用Base的构造方法
        self.baidu = BaiduHome(driver)

    def test01(self):
        '''case1:打开百度,搜索python'''
        '''业务操作方法调用'''
        self.baidu.search_baidu('python')


    def test02(self):
        '''case2: 打开百度,搜索自动化测试'''
        self.baidu.search_baidu('自动化测试')

    def tearDown(self) -> None:
        self.baidu.close_browser()


if __name__ == '__main__':
    unittest.main()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号