关键字驱动
关键字驱动介绍
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分离测试脚本以及测试数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?