项目自动化原定用python做,但是其他测试都只会RF,无奈改成RF,但是很多功能python中好实现到了RF只能通过自定库实现,通过几天研究,终于把Selenium2Library(一下简称S2L)摸透,可以随意结合selenium及其他库定制关键字。
首先我们看看S2L的结构:
非常简洁,就一个初始化文件__init__(),内容只有一个继承SL的类,一个获取关键字描述文档的方法:
这说明,S2L所做的不过是对SL的继续继承,最终的源头方法都有SL提供,因此,我们只需要继承SL就可以实现关键字的定制。
自定义关键字已经是老生常谈了,主要步骤:在set-packages下创建目录NewLibrary,目录下有两个文件,一个是__init__.py继承另一个文件functions.py中的new_keywords具体内容如下:
__init__.py:
functions.py:
此时在RF中已经可以看到自定义库的导入是成功的,但是关键字并没有暴露出来,此处纠结一天,只怪源码看的不仔细,后来细看各个关键字文件发现:
SL中的关键字都使用了装饰器keyword,这个装饰器可以将SL中的方法暴露为关键字给RF。因此我们往functions.py中添加两行就能让关键字暴露于RF中了:
一个自定义库---对SL库的扩展库编写完成,后续可以根据需要进行自定义库的扩充。
后续为自定义库的编写总结:
继承SL后,self究竟是什么?
:经过试验,发现self就是当前浏览器对象,因此后续的方法可以直接用self代替webdriver而执行webdriver的方法。
在S2L的诸多文件中分为以下几部分:
1、base目录下的底层驱动:包括
context文件下的ContextWare上下文管理器;librarycompont文件下下的LibraryCompont库元件(主要是一些日志的打印实现);robotlibcore文件下的元件收集驱动。
2、keywords目录下的关键字集合;
3、locator目录下的元素定位器与窗口管理器
4、utils目录下的事件管理器、库监听等
5、SL库驱动(包括关键字收集,当前浏览器确定等)
6、错误定义。
最近试验了下,依旧继承SeleniumLibrary通过定义GET_BROWSER()方法实例化一个浏览器
对象来保持这个浏览器对象,
后续的自定义方法调用可以直接取GET_BROWSER()方法返回的浏览器对象进行操作,而RF中的关键字能自动获取当前的浏览器对象。
上一篇: 图片验证码识别
下一篇: 软件测试之手工测试人员如何转测试开发?