关键字驱动

关键字驱动介绍

1.关键字驱动和POM模式是企业经常用到的两种设计模式,采用合适的设计模式可以减少代码的冗余,方便后期的维护和管理。

2.关键字驱动可以应用在UI自动化,接口自动化

3.将常用的selenium操作行为进行封装,通过调用自定义函数来实现自动化,是一种常见的关键字驱动。

4.关键字驱动是所有测试框架底层核心代码,它本身是没有什么价值的,真正产生价值的是结合实际的业务进行驱动调用的过程。 .

也可以将一个系统中应用频繁的业务流程进行二次封装,比如很多功能都要先登录才能使用,此时登录时最常用的功能,可以将它封装起来。

5.框架设计原则:

1.代码与数据分离 2.逻辑代码(二次封装代码)与测试代码分离

代码演示

对selenium常用方法进行二次封装

如下代码:

复制代码
from time import sleep

from selenium import webdriver

#创建浏览器驱动对象
driver = webdriver.Chrome()
#打开url
driver.get('https://www.baidu.com/')
#输入框输入文本
driver.find_element_by_id('kw').send_keys('测试')
#按钮点击
driver.find_element_by_id('su').click()
#强制等待
sleep(2)
#关闭浏览器驱动
driver.quit()
复制代码

可以将上面步骤提取出来:

1、创建浏览器驱动对象

2、打开url

3、元素定位

4、文本框输入

5、按钮点击

6、强制等待

7、关闭浏览器驱动

 

关键字封装

现在对上面提取出来的方法进行封装

复制代码
from time import sleep

from selenium import webdriver


class Keys:
    driver = webdriver.Chrome()

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

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

    #input:输入文本
    def input(self,name,value,txt):
        self.locate(name,value).send_keys(txt)

    #click:点击元素
    def click(self,name,value):
        self.locate(name,value).click()

    #sleep:等待
    def sleep(self,time_):
        sleep(time_)

    #quit:退出
    def quit(self):
        self.driver.quit()
复制代码

 

上面已经对selenium常用的方法进行了二次封装,但创建浏览器驱动对象现在是固定是Chrome浏览器,但实际测试情况可能还会有IE,Firefox浏览器等,那这里重新对创建浏览器驱动对象的代码进行调整,以适配不同浏览器的传入

复制代码
#打开浏览器
def open_browers(type_):
    try:
        #gatettr用于返回一个对象属性值,等同于webdriver.type_,然后加上()进行调用
        driver = getattr(webdriver,type_)()
    except Exception as e:
        print(e)
        driver = webdriver.Chrome()
    return driver

class Keys:
    #driver = webdriver.Chrome()
    def __init__(self,type_):
        self.driver = open_browers(type_)
复制代码

接下来看下关键字驱动方法实现最上面的代码是咋样的

复制代码
from Web_Keys.Demo_Keys import Keys


#实例化Keys
keys = Keys('Chrome')

keys.open('https://www.baidu.com/')
keys.input('id','kw','测试')
keys.click('id','su')
keys.sleep(5)
keys.quit()
复制代码

 

可以看到,与上面的代码对比,代码十分简洁,所有测试数据都在一个括号中,将逻辑代码与测试代码分离

但这样还是没有将测试数据与测试用例分离开,但也十分简单,可以使用unittest和ddt就可以做到测试数据与测试用例的分离,见这篇ddt数据驱动+unittest分离测试脚本以及测试数据

 

posted @   测试-13  阅读(450)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示