Skip to content

关键字驱动

关键字驱动设计模式介绍

测试框架的核心设计理念,是决定一个框架能否满足企业实际需求的关键点。而市场最主流的框架设计模式分为关键字驱动和POM(页面对象模型),主要是为了针对不同的业务场景和企业需求来实现不同的测试框架。

关键字驱动,是测试框架设计模式中最为传统的设计模式。就是通过核心的关键字调用,来实现对应的功能需要。

通过自定义的内容,通过以关键字调用的形态进行内容的执行,从而降低代码的冗余。也可以更好地维护我们的自动化测试代码。

关键字驱动的设计模式主要用于以一对多的测试场景。

关键字驱动设计模式原理

测试框架基本原理:

  • 代码与数据分离
  • 逻辑代码与测试代码分离

关键字驱动设计模式代码实现

py
from selenium import webdriver
from time import sleep

'''
    关键字驱动类
'''


# def open_browser(type_):
#     if type_ == 'Chrome':
#         driver = webdriver.Chrome()
#     else:
#         try:
#             driver = getattr(webdriver, type_)()
#         except:
#             driver = webdriver.Chrome()
#     return driver

# 基于用户需要创建对应浏览器对象
def open_browser(type_):
    browser = {
        'Chrome': ['chrome', 'Chrome', 'google', 'gc']
    }
    for key, value in browser.items():
        if type_ in value:
            driver = getattr(webdriver, key)()
            break
    return driver


class WebKey:

    def __init__(self, type_=None):
        self.driver = open_browser(type_)
        self.driver.implicity_wait(5)

    # 打开浏览器
    def open(self, url):
        self.driver.get(url)

    # 元素定位
    def locator(self, by, value):
        return self.driver.find_element(by, value)

    # 点击
    def click(self, by, value):
        self.locator(by, value).click()

    # 输入
    def input(self, by, value, txt):
        self.locator(by, value).send_keys(txt)

    # 切换句柄
    def switch_handle_new(self,close=None,num=1):
        handles = self.driver.window_handles
        if close is not None:
            self.driver.close()
        self.driver.switch_to.window(handles[num])

    # 文本断言:用in包含文本的方式断言
    def assert_text_in(self, by, value, expected):
        try:
            # 实际结果文本
            reality = self.locator(by, value).text
            message = f'''
            断言失败:
                expected:{expected}
                reality:{reality}
                {expected} != {reality}
            '''
            assert expected in reality, message
            return True
        except Exception as e:
            return False

    # 退出浏览器
    def quit(self):
        self.driver.quit()

    # 强制等待
    def wait(self, time_):
        sleep(int(time_))