处理同名关键字

Robot Framework中的关键字分为 库关键字用户关键字. 前者来自 standard libraries 或 external libraries, 后者则要么在当前调用的文件中创建, 要么从 资源文件 中导入.

当用到的关键字变得很多时, 难免会遇到重名的情况, 本节将说明如何处理这种冲突状况.

关键字的范围

当仅使用关键字名称时, 如果存在若干同名的关键字, Robot Framework将试图决定哪个关键字的优先级最高. 关键字的优先级将由关键字的创建方式决定:

  • 在调用关键字的相同文件中创建. 此关键字拥有最高的优先级.
  • 在资源文件中创建并引入(可以是直接引入,也可以是导入的别的资源文件). 此是第二高优先级.
  • 在外部库中创建. 只有在没有其它同名的用户关键字存在的情况下才会用到. 而且,如果标准库中存在了同名的关键字, 将显示警告.
  • 标准库中创建关键字. 这些关键字的优先级最低.

显式指定关键字

光靠作用域不能完美的解决重名问题, 因为相同作用域的若干库或者资源中也会有同名的关键字. 此时只能使用 关键字全名, 所谓全名就是在关键字名称的前面加上其所在的资源或库的名称作为前缀, 中间使用点(.)作为分隔.

对于库中的关键字, 长名称的格式是 LibraryName.Keyword Name. 例如, 标准库 OperatingSystem_ 中的关键字 Run 可以写作 OperatingSystem.Run. 如果库是一个模块或者包, 则必须使用模块或包的全名(例如: com.company.Library.Some Keyword). 如果在引用库的时候使用了 测试库设置别名, 则前缀名称必须是该自定义的名称.

资源文件中的关键字全名指定格式也是类似. 资源的名称取自资源文件的基础名称(basename)并去掉文件扩展名. 例如, 资源文件 myresources.html 中的关键字 Example 可以写作 myresources.Example. 注意, 这种语法如果遇到多个资源文件的基础名称相同, 则必须修改文件名或者关键字名.

关键字的全名和关键字的普通名称一样, 同时忽略大小写, 空格和下划线.

为库和资源显式指定优先级

如果重名冲突的情况比较多, 全部使用全名称格式可能需要不少的工作量. 同时, 全名称格式将难以创建动态的(依赖可用库或资源的)测试用例和用户关键字. 一个针对这两个问题的解决方案是通过一个内置的关键字 Set Library Search Order 显式地指定关键字的优先级.

注解

虽然该关键字的名字中包含了 library, 但是它不仅作用于库, 还对资源文件有效.

Set Library Search Order 接受一个有序列表作为参数, 列表中是库和资源的名称. 当关键字名称遭遇到重名的情况, 将依次在这个列表中的库或资源中查找, 一旦找到即被采用. 如果列表内指定的库和资源没有找到关键字, 则重名冲突造成的执行失败和正常情况一样.

更多的信息和示例请参阅该关键字的文档.