Robot Framework 是一款开源测试自动化框架,更多用于验收测试(ATDD)和机器人流程自动化(RPA)。

框架采用关键字驱动的方式来实现测试脚本的开发,可以通过集成所有内置关键字库、第三方关键字库来构建自动化测试脚本,用户还可以使用与创建测试用例相同的语法,整合现有的关键字提取出更高级别的关键字。

前期博客中曾经介绍了如何自定义Robot Framework 的关键字库以及如何拓展,本文将介绍 Robot Framework 相关 Selenium 库的拓展。

背景

在迪原创新服务的项目中会使用Robot Framework这套框架实现自动化脚本的编写,即使是对于一名没有很深编程经验的测试工程师而言,也可以快速完成自动化脚本的开发,只要他们熟悉所有提供的关键字的用法。

迪原创新团队的最佳实践是这样的:

  • 自动化测试工程师完成所有关键字的开发,和工程层级的整体架构
  • 手工测试工程师开发自动化测试脚本,因为他们更加熟悉被测系统,能够开发出更加符合产品功能点验证的脚本,保证产品的质量
  • 自动化测试工程师收集所有测试脚本,并配置回归测试任务
  • 所有的工程师对每天回归测试失败的脚本负责,分析问题并进行脚本修改

这看起来是一个很好的流程,但是随着团队的壮大,当现有的关键字不能满足测试脚本编写需求的时候,我们总要对选取的第三方库进行关键字的拓展,而不是去重新构造这个关键字库。

那么问题来了,这种情况下该如何做呢?有些人会去拉取第三方库的源码,直接对源码进行修改、增加新的函数。这样做确实很立竿见影,但其后果是:以后不能继续享受到该第三方库的更新,每次更新后你都需要重新做一次代码的修改;不能从正常的仓库安装这些第三方库;必须为你修改的代码增加新的代码仓库,进行版本管理;整体的自动化回归流水线都要进行改造…等等还有很多由此引出的问题。

经过反复实践,迪原创新团队认为拓展Robot Framework框架的第三方库是个明智的选择,本文将具体说明其中的做法。

三种拓展方法

SeleniumLibrary提供了三种创建新功能的方法:Plugin API、EventFiringWebDriver和在SeleniumLibrary上构建新库。Plugin API和扩展SeleniumLibrary允许对SeleniumLibrary所有公共API进行访问。EventFiringWebDriver为Selenium API提供的侦听器的接口。

Plugin API

SeleniumLibrary提供插件,作为一种用于修改、添加库关键字和修改一些内部功能的方法,而无需创建新库或修改源代码。只许通过库导入语法加载插件即可。

EventFiringWebDriver

EventFiringWebDriver是Selenium提供的API的侦听器接口。EventFiringWebDriver允许侦听Selenium API调用,并允许用户在Selenium API方法之前和之后触发自定义事件。

拓展SeleniumLibrary库

与任何Robot Framework Python库一样,通过继承SeleniumLibrary、从Robot Framework获取活跃库实例或通过Python或Robot Framework提供的其他方法,可以在SeleniumLibrary之上构建新库。构建新的库允许库创建者自由选择新库提供的关键字,并且比插件API提供的更加灵活的创建新库的方法。

开放API

在扩展库之前,您必须了解以下SeleniumLibrary提供的公共API:

方法 描述
find_element 获取满足检索条件的第一个页面元素
find_elements 获取所有满足检索条件的页面元素
get_keyword_tags 返回关键字的标签
register_driver 为Selenium运行时缓存添加WebDriver对象的实例
run_keyword 执行关键字
failure_occurred SeleniumLibrary相关关键字执行时候是会被调用的关键字

还有以下可用的公共属性:

属性 描述
driver 当前使用的driver实例
event_firing_webdriver event_firing_webdriver的引用
timeout 全局超时时间
implicit_wait 全局隐式等待时间
run_on_failure_keyword 失败时执行的关键字
screenshot_root_directory 页面截图文件存储的根目录

Plugin API

导入插件与导入Robot框架库类似

Copy to Clipboard

实现插件拓展

Copy to Clipboard

EventFiringWebDriver

EventFiringWebDriver是Selenium提供的API的侦听器类型。实际上EventFiringWebDriver会截获SeleniumLibrary或其他库关键字发出的seleniumapi调用的方法事件,并触发单独的Selenium事件。可以在Selenium API调用之前和之后触发该事件。

Copy to Clipboard

结论

拥有强大的拓展库和插件的Robot Framework框架可以大量减少脚本编写时间,节省人力成本,并使手工工程师能够完成自动化脚本的编写。

如果想了解更多关于Robot Framework的使用和更多关于界面自动化的最佳实践,请联系迪原