美文网首页
RF用户关键字和资源文件

RF用户关键字和资源文件

作者: 清水秋香 | 来源:发表于2020-04-08 12:21 被阅读0次

    用户关键字

    • 什么是用户关键字
      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
    

    相关文章

      网友评论

          本文标题:RF用户关键字和资源文件

          本文链接:https://www.haomeiwen.com/subject/zfnzphtx.html