博客
关于我
web自动化测试POM设计模式
阅读量:565 次
发布时间:2019-03-10

本文共 4394 字,大约阅读时间需要 14 分钟。

Page Object Models

Page对象模型在测试自动化领域越来越流行,它的出现为了改善测试维护性并减少代码重复。Page对象是一个面向对象的类,用于与页面的UI交互。使用Page对象的好处是,当页面的UI发生变化时,只需要修改Page对象中的代码即可,无需修改测试代码本身。

Page Object Benefits

使用Page对象具有以下优点:

  • 测试代码和页面特定代码之间的区分更清晰,提高了代码的可维护性
  • 元素对象的管理集中,降低了维护难度
  • 代码具有一定的复用性,且成本较低
  • Page Object Structure

    Page对象的设计分为三个层级:

  • 页面层:封装元素定位和等待等基本方法
  • 操作层:调用页面层方法,执行元素操作
  • 业务层:规划每个业务的元素定位,为操作层提供支持
  • File夹名称中的备注信息仅供参考,请参阅下方图片。

    common/basePage.py

    以下是Page对象的一个示例类:

    import loggingfrom . import pathPage as PGfrom selenium.webdriver.remote.webdriver import WebDriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECclass BasePage:    def __init__(self, driver):        self.driver = driver            def page_waits(self, located, time_out, poll_frequency):        """获取元素等待"""        WebDriverWait(self.driver, time_out, poll_frequency).until(EC.visibility_of_element_located(located))        def page_element_exists(self, located, image):        """判断页面元素是否存在"""        try:            WebDriverWait(self.driver, 20, 1).until(EC.presence_of_element_located(located))        except Exception as e:            self.page_screenshot(image)            logging.error(located)            raise e        return True        def page_element(self, located, image):        """获取元素"""        try:            ele = self.driver.find_element(*located)        except Exception as e:            self.page_screenshot(image)            logging.error(ele)            raise e        return ele        def page_click(self, located, image):        """点击元素"""        self.page_waits(located, 20, 1)        ele_click = self.page_element(located, image)        try:            ele_click.click()        except Exception as e:            self.page_screenshot(image)            logging.error(located)            raise e        def page_clear(self, location, image):        """清空输入框"""        self.page_waits(location, 20, 1)        ele_clear = self.page_element(location, image)        try:            ele_clear.clear()        except Exception as e:            self.page_screenshot(image)            logging.error(location)            raise e        def page_send_keys(self, location, text, image):        """输入文本信息"""        self.page_waits(location, 20, 1)        ele_send_keys = self.page_element(location, image)        try:            ele_send_keys.send_keys(text)        except Exception as e:            self.page_screenshot(image)            logging.error(location)            raise e        def page_text(self, location, image):        """获取文本信息"""        self.page_waits(location, 20, 1)        ele_text = self.page_element(location, image)        try:            text_info = ele_text.text        except Exception as e:            self.page_screenshot(image)            logging.error(text_info)            raise e        return text_info

    elementHandle/baiduHandle.py

    以下是对百度搜索页面的处理类:

    from .basePage import BasePagefrom .elementLocalization import BaiDuSearchclass HandleBaiDu:    def __init__(self, driver):        self.driver = driver        self.bd = BaiDuSearch()        self.bp = BasePage(self.driver)        def baidu_search(self, input_info):        """执行百度搜索"""        self.bp.page_send_keys(self.bd.search_input, input_info, '百度搜索输入框')        self.bp.page_click(self.bd.baidu_click, '鼠标点击百度一下')        def assert_search_result(self):        """断言搜索结果"""        return self.bp.page_element_is_exits(self.bd.assert_result, '断言搜索结果')

    elementLocalization/baiduLoc.py

    以下是百度搜索页面的元素定位配置:

    from selenium.webdriver.common.by import Byclass BaiDuSearch:    search_input = (By.XPATH, '//*[@id="kw"]')    baidu_click = (By.XPATH, '//*[@id="su"]')    assert_result = (By.XPATH, '//*[@class="res-gap-right16"]')

    testCases/conftest.py

    以下是测试环境配置:

    import pytestimport timefrom selenium import webdriver@pytest.fixture(scope='session', name='pre')def pre_init():    """初始化测试环境"""    driver = webdriver.Chrome()    driver.get('https://www.baidu.com/')    driver.maximize_window()    time.sleep(2)    yield driver    time.sleep(2)    driver.quit()

    testCases/test_baiduSearch.py

    以下是百度搜索测试用例:

    import pytestfrom .elementHandle import HandleBaiDuclass TestBaiduSearch:    def test_baidu_search(self, pre):        """百度搜索测试用例"""        HandleBaiDu(pre).baidu_search('baidu')        result = HandleBaiDu(pre).assert_search_result()        print(result)

    以上代码仅供参考,可根据实际需求进行调整和扩展。Pytest框架用于测试编写,你也可以创建入口文件并运行用例生成测试报告。

    转载地址:http://bidvz.baihongyu.com/

    你可能感兴趣的文章
    SpringBoot找不到@EnableRety注解
    查看>>
    简易计算器案例
    查看>>
    在Vue中使用样式——使用内联样式
    查看>>
    Find Familiar Service Features in Lightning Experience
    查看>>
    Explore Optimization
    查看>>
    Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
    查看>>
    2020Java程序设计基础(华东交通大学)章节测试免费满分答案
    查看>>
    OpenCV-未定义符号:hb_font_funcs_set_variation_glyph_func
    查看>>
    小程序之wx:request(转)
    查看>>
    连接Oracle数据库经常报错?关于listener.ora和tnsnames.ora文件的配置
    查看>>
    解决数据库报ORA-02289:序列不存在错误
    查看>>
    map[]和map.at()取值之间的区别
    查看>>
    成功解决升级virtualenv报错问题
    查看>>
    【SQLI-Lab】靶场搭建
    查看>>
    Xception 设计进化
    查看>>
    【Bootstrap5】精细学习记录
    查看>>
    SkyWalking性能剖析
    查看>>
    LeetCode197.打家劫舍
    查看>>
    A simple problem HDU-2522 【数学技巧】
    查看>>
    487-3279 POJ-1022【前导0~思维漏洞】
    查看>>