目录

    配置表

    Robot Framework 的配置表主要有两种用途。详细说明,请参考这里

    • 导入测试、资源文件和变量文件。
    • 定义元数据。

    在 Setting 表格中:

    Library     引入库
    Resource    引入资源文件
    Variables    引入变量文件
    Test Setup    指定缺省的 test setup
    Test Teardown    指定缺省的 test teardown
    

    在测试用例中:

    [Documentation]    测试用例描述
    [Tags]    测试用例的 Tag
    [Setup]    指定开始之前的操作
    [Teardown]    指定结束之后的操作
    [Template]    指定测试目标
    [Timeout]    指定测试用例的超时时间
    

    关键字表中:

    [Documentation]    关键字的描述
    [Tags]    关键字的 Tag
    [Arguments]    定义关键字的参数
    [Return]    指定关键字的返回值
    [Teardown]    指定关键字执行结束之后的操作
    [Timeout]    指定关键字的超时时间
    

    PyCharm 中执行 Robot Framework

    1. 安装 IntelliBot 插件。Setting > Plugins > Install JetBrains Plugins 查找 IntelliBot 并安装。
    2. 新增 .txt 格式文件。Setting > Editor > File Types 选中 Robot feature,新增 .txt。
    3. 新增 External tools 命令。Setting>Tools>External tools,新增如下两条命令:

    执行测试套件

    Name: Robot Run TestSuite
    Program: path\Scripts\pybot.bat
    Arguments: -d results $FileName$
    Working directory: $FileDir$
    

    执行测试用例

    Name: Robot Run SingleTestCase
    Program: path\Scripts\pybot.bat
    Arguments: -d results -t "$SelectedText$" ./
    Working directory: $FileDir$
    

    使用时,在编辑区域右键,在 External Tools 中可以看执行 Robot Framework 的命令:

    文件上传

    文件上传功能,使用到 Selenium2library 中的关键字 Choose File

    为了兼容不同系统,文件路径使用 ${/} 而不是 / 。Robot Framework 会根据不同的系统,自适应路径分隔符。

    *** Settings ***
    Library           Selenium2Library
    
    *** Test Cases ***
    文件上传
        [Documentation]    测试上传文件的写法
        [Timeout]    20
        Open Browser    https://image.baidu.com/    Chrome
        Wait Until Element Is Visible    css=.st_camera_off
        Click Element    css=.st_camera_off
        ${file_path}    Set Variable    ${CURDIR}${/}mysql.png
        Choose File    id=stfile    ${file_path}
        Sleep    3
        Close Browser
    

    文件下载

    实现文件下载并判断是否成功的思路是:

    1. 根据当前的时间,创建一个独一无二的目录,用于保存下载的文件。
    2. 下载文件到上面的目录中。
    3. 通过 Wait Until Keyword Succeeds 关键字,轮询目录中是否存在一个非临时文件。
    4. 如果超时则,下载失败。如果存在一个非临时文件,则下载成功。
    *** Settings ***
    Library           Selenium2Library
    Library           OperatingSystem
    
    *** Test Cases ***
    文件下载
        [Documentation]    测试上传文件的写法
        ${now}    Get Time    epoch
        ${download directory}    Join Path    D:\\Download    downloads_${now}
        Create Directory    ${download directory}
        ${chrome options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
        ${disabled}    Create List    Chrome PDF Viewer
        ${prefs}    Create Dictionary    download.default_directory=${download directory}    plugins.plugins_disabled=${disabled}
        Call Method    ${chrome options}    add_experimental_option    prefs    ${prefs}
        Create Webdriver    Chrome    chrome_options=${chrome options}
        Goto    https://sourceforge.net/projects/p7zip/
        Maximize Browser Window
        Wait Until Element Is Visible    css=.buttons a
        Click Element    css=.buttons a
        ${file}    Wait Until Keyword Succeeds    1 min    20 s    下载完成    ${download directory}
        [Teardown]    Close Browser
    
    *** Keywords ***
    下载完成
        [Arguments]    ${directory}
        ${files}    List Files In Directory    ${directory}
        Length Should Be    ${files}    1    Should be only one file in the download folder
        Should Not Match Regexp    ${files[0]}    (?i).*\\.tmp    Chrome is still downloading a file
        ${file}    Join Path    ${directory}    ${files[0]}
        [Return]    ${file}
    

    关键字 Wait Until Keyword Succeeds 后面的两个参数 1 min 20 s ,表示尝试执行关键字的总时间为 1 min,每次尝试间隔 20 s。

    执行 JavaScript

    • 异步执行
    *** Settings ***
    Library           Selenium2Library
    
    *** Test Cases ***
    异步执行 JavaScript
        Open Browser    https://www.baidu.com/    Chrome
        Sleep    3
        Execute Async Javascript    a = window.document.createElement('script');a.src='https://code.jquery.com/jquery-3.3.1.min.js';window.document.body.appendChild(a);
    
    • 同步执行
    *** Settings ***
    Library           Selenium2Library
    
    *** Test Cases ***
    同步执行 JavaScript
        Open Browser    https://www.baidu.com/    Chrome
        Sleep    3
        ${sum}=    Execute JavaScript    window.sumjs = 1+1; return window.sumjs;
        Log    ${sum}    warn
        Execute JavaScript    alert(window.sumjs);