因为RobotFrameWork
是由Python所编写的,在RF
当中变量的声明和使用也与在Python
当中类似。变量不需要特定的声明,只要有初始化赋值即可使用。
在RF
当中主要有三种类型:Scalar
、List
、Dict
在RF
当每种变量都需要用特定的‘变量标识符’来表明该变量的类型:
Scalar
变量:${变量名}。表示一个数据。作为参数传递时,表示一个参数。List
变量:@{变量名}。表示一组数据。作为参数传递时,有几个数据就是几个参数。Dict
变量:&{变量名}。表示一组键值对数据。在作为参数传递时,有几个键值对就是几个参数。 在通常情况下,每个人变量默认都为全局变量。但具体变量还需要根据具体定义的位置来确定其作用域。
一个Case
里面的变量:作用域在这整个Case
内部;
一个UserKeyWord
里面的变量:作用域在这个UserKeyWork
内部。只要引用了这个资源文件的目录或Suite
都可以使用这些变量;
一个文件型Suite里面的变量:作用域在这个Suite
内部,,其下所有的Case
都可以使用(一种是定义在目录型Suite
下的,一种是定义在资源文件下的,资源文件下定义的变量可以通过调用资源文件来使用)
一个目录型Suite
里面的变量:作用域在这个目录里面(这种定义出来是没什么意义的:它下面的文件型Suite是无法使用这些变量的)
变量的作用域是可以改变的。通过一些关键字可以对变量进行作用域的改变
Set Global Variable
:设置为全局变量。设置后这个变量在所有的测试用例和测试套件中都可以使用。Set Suite Variable
:设定为File Suite
级变量。设置后这个变量在当前文件Suite
内都可以使用。Set Test Variable
:设置Case
级变量。设置后这个变量在当前Test Case
内可以使用。相同点:
@{}
列表类型和${}
列表类型都可以用来创建列表变量,均可通过Set Variable
和Create List
来创建。
不同点:
Scalar
类型:值里面不管有多少个元素,都是一个变量值;List
类型变量:值里面有多少个元素就有多少个元素;${List}
可以看作一个列表整体,一个列表就是一个参数;@{List}
是将列表拆成一个个单独的元素,每个元素都是一个参数。${List}
在Python里面就是一个List
(一个整体),然后@{List}
就是展开其List中的每个元素,作为多个参数传入,和*args
一样效果,在Python
里叫可变参数。 在RF当中,使用Run Keyword If
关键字做条件判断。
语法:
run keyword if + python条件表达式 + 关键字 + 关键字所需参数
示例:
*** Test Cases ***
Test1
run keyword if 1>0 log 条件判断测试1
语法:
run keyword if + python条件表达式 + 关键字 + 关键字所需参数
... ELSE + 关键字 + 关键字所需参数
有个坑,在RF当中,运用变量进行对比时,需要使用如下方法引用变量
*** Test Cases ***
Test2
${var} set variable hello RF
run keyword if 'hello' in $var and 'rf' in $var log to console 判断正确
... ELSE log to console 判断错误
引用变量时,不需要使用{}。
语法:
run keyword if + python条件表达式 + 关键字 + 关键字所需参数
... ELSE IF + 关键字 + 关键字所需参数
... ELSE + 关键字 + 关键字所需参数
在RF当中没有while循环,如果需要使用到while循环去判断某一个值为真时,可以采用for循环来代替。
语法:
For 变量 IN 序列(or 列表)
关键字 参数值
Exit for loop if 判断条件
For 变量 IN RANGE 循环限量
关键字 参数值
Exit for loop if 判断条件
在RF当中Exit for loop
关键字相当于Python
当中的break
而RF当中的Continue for loop
关键字相当于Python
当中的continue
而配合判断条件来使用的话,可以使用以下:
exit for loop if
关键字其实就相当于 run keyword if
与 exit for loop
关键字的结合
continue for loop if
关键字相当于 run keyword if
与 continue for loop
关键字的结合
在RF当中,SeleniumLibrary
是第三方库,用于在RF当中支持Web自动化的操作,因为RF
是Python
所写的,所以对于这个第三方包的底层同样也是为Python
当中的Selenium
包。
而在RF
当中对网页的定位,使用的方法同selenium
的方法,通常使用XPATH
、ID
、TAGNAME
、CSS_Select
。
在SeleniumLibrary
当中,可以查看到所有的内置关键字,在目前版本当中共有180+个关键字。可以通过以下文件路径查看源码。
1.元素定位的方法
在RobotFrameWork
当中,有以下的定位方法。整体的定位方法如下:
定位策略 | 匹配方法 | 定位示例 |
---|---|---|
id |
元素的id属性 | id=example |
name |
元素的name属性 | name=example |
identifier |
元素的id或name属性 | identifier=example |
class |
元素的class属性 | class=example |
tag |
元素的标签名称 | tag=div |
xpath |
xpath定位表达式 | xpath=//div[@id=example] |
css |
css selector定位表达式 | css=div#example |
dom |
DOM表达式 | dom=document.images[5] |
link |
精确匹配链接元素的文本内容 | link=The example |
partial link |
部分匹配链接元素的文本内容 | partial link=he ex |
jquery |
jQuery表达式 | jquery=div.example |
2.浏览器和窗口操作关键字
关键字 | 关键字说明 |
---|---|
open browser |
打开浏览器并访问系统地址。url: 网站地址,browser: 浏览器类型 |
close browser |
关闭浏览器 |
maximize browser window |
当前窗口最大化 |
get window size |
获取当前窗口的大小 |
set window size |
设置窗口大小 |
get window handles |
获取浏览器中,所有窗口的句柄 |
switch window |
切换窗口。可根据窗口的句柄、标题、名称等切换 |
get window names |
获取浏览器,所有窗口的名称 |
get window titles |
获取所有窗口的标题 |
get locations |
获取所有窗口的url |
3.对页面元素进行操作
关键字 | 关键字说明 |
---|---|
click ement |
点击元素 |
input text |
在元素中输入文本值 |
get element attribute |
获取元素的某一个属性值 |
get element size |
获取元素的大小 |
get value |
获取元素的value 属性值 |
get text |
获取元素的文本内容 |
clear element text |
清除元素的文本值 |
get webelement |
获取一个元素对象。WebElment 对象 |
get webelements |
获取匹配的所有元素对象。WebElment 对象 |
set focus to element |
元素获取焦点 |
double click element |
双击元素 |
scroll element into view |
滚动元素到可见区域 |
drag and drop |
将一个元素拖拽到另一个元素区域中 |
mouse over |
鼠标悬浮在元素上 |
press keys |
键盘按键操作 |
4.select\frame\alert表格等操作关键字
关键字 | 关键字说明 |
---|---|
get list items |
select/option元素中,获取所有的options选项 |
select from list by index |
select/option元素中,根据下标来选择option选项 |
select from list by value |
select/option元素中,根据value属性来选择option选项 |
select from list by label |
select/option元素中,根据文本内容来选择option选项 |
select frame |
切换到指定的iframe当中 |
unselect frame |
退出iframe,切换到默认的html页面中 |
handle alert |
关闭alert弹出框 |
input text into alert |
输入文本到alert弹框中,并关闭alert弹出框 |
choose file |
在上传文件的输入框中(input元素的type为file)输入文本地址 |
get table cell |
获取表格的单元格值。行号和列号起始值为1.包含表头和表尾所对应的行 |
5.元素等待关键字
关键字 | 关键字说明 |
---|---|
wait for condition |
等待条件成立:条件为js表达式,表达式的结果要为布尔值 |
wait until element is visible |
等待指定的元素可见 |
wait until element is not visible |
等待指定的元素不可见 |
wait until element is enabled |
等待指定的元素可用 |
wait until element contains |
等待指定的元素 包含 指定的文本内容 |
wait until element does not contain |
等待指定的元素 不包含 指定的文本内容 |
wait until page contains element |
等待页面 包含指定的元素 |
wait until page foes not contain element |
等待页面 不包含指定的元素 |
wait until page contains |
等待页面 包含指定的文本内容 |
wait until page does not contain |
等待页面 不包含指定的文本内容 |
6.断言关键字
关键字 | 关键字说明 |
---|---|
page should contain element |
页面应当 包含指定的元素 |
page should not contain element |
页面应当 不包含指定的元素 |
locator should match x times |
元素定位表达式应该匹配 指定 次数 |
element should be visible |
指定的元素 应当可见 |
element should not be visible |
指定的元素 应当不可见 |
element should be enabled |
指定的元素 应当可用 |
element should be disabled |
指定的元素 应当不可用 |
element text should be |
指定元素的文本内容 应当是 指定内容 |
element text should not be |
指定元素的文本内容 应当不是 指定内容 |
element should be focused |
指定的元素 应当为焦点状态 |
7.截屏类关键字
关键字 | 关键字说明 |
---|---|
capture page screenshot |
截取当前页面图片 |
capture element screenshot |
截取指定元素的图片 |
set screenshot directory |
设置截图存储目录 |
关键字 | 关键字说明 |
---|---|
capture page screenshot |
截取当前页面图片 |
capture element screenshot |
截取指定元素的图片 |
set screenshot directory |
设置截图存储目录 |
在RobotFrameWork当中,上文基本上已经总结了常用的关键字,在后续会写一些RobotFrameWork的实际案例的分析。