RF用户关键字和资源文件

2020-04-08  本文已影响0人  清水秋香

用户关键字

定义使用用户关键字

支持返回值

#使用用户关键字
*** 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搜索资源文件的规则是:

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
上一篇 下一篇

猜你喜欢

热点阅读