0


Selenium关键字驱动封装及优势

关键字驱动介绍

自动化测试领域下,有两大设计模式,作为测试框架的核心底层。

  • 关键字驱动:广泛应用在接口、WEB、APP的测试领域下。
  • 本质意义上而言,就是面向对象的编程思维。是一种可以以一套思维逻辑来满足大范围的项目的自动化测试需求。
  • 在测试框架体系下,关键字驱动是非常常用的一种设计模式。

关键字驱动的结构与优势

关键字驱动结构

1.结构形态的清晰化,结构分离:代码与数据分离,逻辑代码与测试代码分离。
2.封装一定要复用性高。
3.足够灵活的封装

关键字驱动的优势

1.可以随时添加或修改关键字驱动类,便于后期的各类维护。
2.代码变得更加简洁
3.维护更加容易,冗余降低,提升了代码的拓展性。

关键字驱动类设计原理

  • 通过以操作行为为关键字的形态进行封装,可以有效地将各类业务的自动化测试实现。如果要解决单个框架应对多个系统的自动化测试业务,则优先考虑关键字驱动。
  • 结构上的逻辑代码与测试代码的完全分离。
  • 关键字驱动类一定是结合数据驱动类来实现完整的测试形态。
  • 关键字驱动形态,最为核心的应用在于接口自动化测试,UI 层,一般而言是结合企业需求来定义的。
  • 基于企业的实际需求来设计一个对应的测试框架。而不是单纯的代码库的堆积。所有的测试框架都不是以固定的内容去套用不同的公司体系,一定是结合公司体系来设计完整的测试框 架。
  • 在封装关键字驱动类中的函数时,一定要考虑到每一个函数是否会有不同的业务场景,如果有,则需要合理设计代码的逻辑。确保每一个函数都能够有高复用性与灵活性
'''
    关键字驱动类。
    一般在常态化中,考虑封装各类操作行为,作为关键字驱动的核心底层结构。
    以工具类的形态,便于其他的类来进行调用。
    常用的操作行为:
        1. 访问url
        2. 创建driver对象
        3. 元素定位
        4. 三类等待
        5. 输入、点击
        6. 切换iframe和句柄
        。。。。。
    封装的概念上,我们优先考虑自己用的上的内容,进行封装。
    Selenium本身类似于一家超级无敌大的商场。关键字驱动类类似于家用的工具箱,要往工具箱里添加我们需要的东西。
    在调用工具箱实现自己的自动化时,如果发现工具少了,或者缺失了,可以及时到Selenium中进行补充。
'''import time

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from options_web import chrome_options

# 构造浏览器对象,基于type_参数,构造对应的浏览器对象。defopen_browser(type_):'''
        getattr是python内置的四大函数之一,反射机制,用于获取指定对象的属性或者函数。
        driver = getattr(webdriver, type_)()意思就是:
        if type_ == 'Chrome':
            driver = webdriver.Chrome()
        elif type_ == 'Edge':
            driver = webdriver.Edge()
        elif.....
        因为反射本身是用来获取指定对象属性的。如果要获取的是函数,则需要在反射的后面加()
        例如:
            getattr(webdriver, type_) 表示获取webdriver的type_属性
            getattr(webdriver, type_)() 表示获取webdriver的type_函数
    '''try:if type_ =='Chrome':
            driver = webdriver.Chrome(options=chrome_options.options())else:
            driver =getattr(webdriver, type_)()except:# 没有填写可以创建默认browser
        driver = webdriver.Chrome()
    return driver

    # 这种写法可以更加好地全面化满足用户的调用需求# browser = {'chrome': ['Chrome', 'chrome', 'cc', '谷歌'],#            'ie': ['ie', 'Ie', 'IE', '阿姨']}# if type_ in browser['chrome']:#     driver = webdriver.Chrome(options=chrome_options.options())# elif type_ in browser['ie']:#     driver = webdriver.Ie()# else:#     driver = webdriver.Chrome()# return driverclassKeys:# 临时driver对象# driver = webdriver.Chrome()# 构造函数def__init__(self, type_):
        self.driver = open_browser(type_)
        self.driver.implicitly_wait(5)# url的访问defopen(self, url):
        self.driver.get(url)# 元素定位:一定要考虑各种不同的元素定位方法。deflocate(self, by, value):return self.driver.find_element(by, value)# 输入definput(self, by, value, txt):
        self.locate(by, value).send_keys(txt)# 点击defclick(self, by, value):
        self.locate(by, value).click()# 浏览器关闭defquit(self):
        self.driver.quit()# 文本断言defassert_text(self, by, value, expected):try:
            reality = self.locate(by, value).text
            assert expected == reality,'{0}与{1}不相等'.format(expected, reality)except Exception as e:print('断言失败:{}'.format(e))# 显式等待defdriver_wait(self, by, value):return WebDriverWait(self.driver,10,0.5).until(lambda el: self.locate(by, value), message='元素获取失败')# 强制等待defsleep(self, time_):
        time.sleep(time_)# 句柄的切换:为了满足有些场景下不需要close,需要考虑逻辑的处理defswitch_handle(self, status=1):
        handles = self.driver.window_handles
        if status ==1:
            self.driver.close()
        self.driver.switch_to.window(handles[1])# 调试if __name__ =='__main__':
    key = Keys('Chrome')
    key.open('http://www.baidu.com')

本文转载自: https://blog.csdn.net/weixin_42327347/article/details/124455542
版权归原作者 翀堏 所有, 如有侵权,请联系我们删除。

“Selenium关键字驱动封装及优势”的评论:

还没有评论