用户关键字
- 什么是用户关键字
RF中像编程语言中函数概念的东西,就是用户关键字,用户关键字就像RF中的函数
keywords表就是定义用户关键字的
定义使用用户关键字
支持返回值
#使用用户关键字
*** Test Cases ***
case1
${list} getvar1
log to console ${list}
#定义用户关键字
*** Keywords ***
getvar1
${var} evaluate [i for i in range(10)]
#return 也可以写在前面,原因是rf会先读取配置项,类似一个预编译的动作
[Return] ${var}
支持参数的传递
*** Test Cases ***
test
addCourse robot 自动化 1
*** Keywords ***
#要想放入形参如何做呢,类似与写[Setup] [Teardown],这里声明的是[Arguments]
addCourse
[Arguments] ${name} ${desc} ${idx}
click element css=.btn-md
input text xpath=//input[@ng-model="addData.name"] ${name}
input text xpath=//*[@ng-model="addData.desc"] ${desc}
input text xpath=//*[@ng-model="addData.display_idx"] ${idx}
click element xpath=//*[@ng-click="addOne()"]
sleep 1
资源文件
资源文件就是RF层面的库文件,里面可以包含用来共享的用户关键字。
也可以包含前面说的 Variable定义的变量
资源文件的格式基本和测试套件文件类似,
除了不能有测试用例表和一些特别的设置项
在setting表里用Resource声明资源文件
资源文件声明的时候一定要带扩展名(不像库文件)
*** Settings ***
Resource rc.robot
一些库的导入也可以放在rc.robot中,以下为rc.robot中的Settings。
但凡引用了rc.robot资源文件,都会引入资源文件里导入的库
*** Settings ***
Library deletecourse
Library SeleniumLibrary
Library Collections
RF搜索资源文件:
使用相对路径的时候,RF搜索资源文件的规则是:
- 首先相对搜索当前文件的目录匹配搜索
- 如果找不到,就在Python的模块路径中搜索
RF数据驱动
资源文件
*** Settings ***
Library deletecourse
Library SeleniumLibrary
Library Collections
#资源文件不可以包含测试用例表
*** Keywords ***
#要想放入形参如何做呢,类似与写[Setup] [Teardown],这里声明的是[Arguments]
open
open browser http://localhost/mgr/ps/mgr/index.html chrome
set selenium implicit wait 10
addCourse
[Arguments] ${name} ${desc} ${idx}
click element css=.btn-md
input text xpath=//input[@ng-model="addData.name"] ${name}
input text xpath=//*[@ng-model="addData.desc"] ${desc}
input text xpath=//*[@ng-model="addData.display_idx"] ${idx}
click element xpath=//*[@ng-click="addOne()"]
sleep 1
checkCourse
[Arguments] ${check}
${list} create list
${eles} get webelements xpath=//tbody/tr/td[2]/span
:FOR ${one} in @{eles}
\ log to console ${one.text}
\ append to list ${list} ${one.text}
should be true $check in $list
close
close browser
python+selenium 清除环境干扰
这段代码放在循环中driver.find_elements_by_xpath('//button[@ng-click="delOne(one)"]')是为了防止获取陈旧元素,每一次删除前端都会向后端重新申请数据,这时我门如果不重新获取要点击的元素,就会拿到陈旧的元素,代码会报错
from time import sleep
from selenium import webdriver
def deleteAllCourse():
driver = webdriver.Chrome()
driver.get('http://localhost/mgr/ps/mgr/index.html')
driver.implicitly_wait(5)
while True:
sleep(2)
delete_button = driver.find_elements_by_xpath('//button[@ng-click="delOne(one)"]')
if delete_button:
delete_button[0].click()
driver.find_element_by_css_selector('.btn-primary.btn').click()
else:
break
if __name__ == '__main__':
deleteAllCourse()
数据驱动文件
*** Settings ***
Resource ./rf作业3/rc.robot
Library ./rf作业3/deletecourse
*** Test Cases ***
#如果有大量的数据这种方式显然不现实
test2
[Setup] deleteAllCourse
[Teardown] deleteAllCourse
[Template] addcourseandcheck
robot 1 1
seleniumm 2 2
jemeter 3 3
*** Keywords ***
addcourseandcheck
[Arguments] ${name} ${desc} ${idx}
open
#调用的时候要加上
addCourse ${name} ${desc} ${idx}
checkCourse ${name}
close
网友评论