【问题标题】:How to reconstruct multiple variables into one with parameter?如何使用参数将多个变量重构为一个?
【发布时间】:2021-12-22 18:10:36
【问题描述】:

网页有一个包含 11 个复选框的表格。

我想灵活地让测试人员只需输入 1 或 2 或 3 来选择特定的复选框。

如何仅使用 ONE variable 构建关键字?所以测试人员不需要输入多行元素变量。

元素:

xpath=(//input[@class="ant-checkbox-input"])[1]
xpath=(//input[@class="ant-checkbox-input"])[2]
xpath=(//input[@class="ant-checkbox-input"])[3]

当前脚本:

*** Settings ***
Library    Browser

*** Variables ***
${Checkbox-1}   xpath=(//input[@class="ant-checkbox-input"])[1]
${Checkbox-2}   xpath=(//input[@class="ant-checkbox-input"])[2]
${Checkbox-2}   xpath=(//input[@class="ant-checkbox-input"])[3]

*** Test Cases ***
   Click    ${Checkbox-1}
   Click    ${Checkbox-2}
   Click    ${Checkbox-3}

期望脚本:

    *** Settings ***
    Library    Browser
    
    *** Variables ***
    ${Checkbox-1}   xpath=(//input[@class="ant-checkbox-input"])[1]
    ${Checkbox-2}   xpath=(//input[@class="ant-checkbox-input"])[2]
    ${Checkbox-2}   xpath=(//input[@class="ant-checkbox-input"])[3]
    ${CustomCheckbox}   I don't know how to construct
    *** Test Cases ***
    User select checkbox 1 and 2
      [Arguments]    ${not sure}  
       Click    ${CustomCheckbox}   1     2

表格第一行的外部html

<tr data-row-key="1" class="ant-table-row ant-table-row-level-0">
    <td class="ant-table-cell ant-table-selection-column">
        <label class="ant-checkbox-wrapper">
            <span class="ant-checkbox">
                <input type="checkbox" class="ant-checkbox-input" value="">
                    <span class="ant-checkbox-inner"/>
                </span>
            </label>
        </td>
        <td class="ant-table-cell">1</td>
        <td class="ant-table-cell">101-39s5mb.mp4</td>
    </tr>

【问题讨论】:

    标签: css selenium xpath robotframework


    【解决方案1】:

    关键字实现如下。

    *** Variables ***
    ${checkbox_xpath}    xpath=(//input[@class="ant-checkbox-input"])
    
    *** Test Cases ***
    Test
        Log To Console    \nClick 1
        Name That You Want    1
        Log To Console    Click 2 and 3
        Name That You Want    2    3
    
    *** Keywords ***
    Name That You Want
        [Arguments]    @{index}
        
        FOR    ${key}    IN    @{index}
            Log To Console    ${checkbox_xpath}\[${key}\]
        END
    

    输出:

    ==============================================================================
    Main
    ==============================================================================
    Test
    Click 1
    .xpath=(//input[@class="ant-checkbox-input"])[1]
    .Click 2 and 3
    .xpath=(//input[@class="ant-checkbox-input"])[2]
    xpath=(//input[@class="ant-checkbox-input"])[3]
    Test                                                                  | PASS |
    ------------------------------------------------------------------------------
    Main                                                                  | PASS |
    1 test, 1 passed, 0 failed
    ==============================================================================
    

    【讨论】:

    • 实际上我希望在测试用例中添加参数,以便我可以输入哪个复选框 [1] 或 [2] 来勾选....您的解决方案是否相同?我不确定什么是 Test1 Test2 Test3
    • 我在主帖中添加了“预期脚本:”,我想是这样的,但不知道该怎么做。
    • @user12158726 好的,我只知道你想要什么。我编辑我的答案。你可以再检查一遍。
    • 是的,您的最新解决方案更接近。只是如果我有 100 个 checkbixes,那么我需要在 variables 处键入 100 行
    • @user12158726 如果您可以确保 XPath 除了括号中的数字之外是一致的。您不会在代码中键入 100 次变量。
    【解决方案2】:

    您可以使用评估功能来做到这一点。

    *** Settings ***
    
    Library    Browser
    Library    SeleniumLibrary
    
    *** Variables ***
    
    ${Checkbox}   xpath=(//input[@class='ant-checkbox-input'])[{0}]
    
    *** Test Cases ***
    Test
        Click Checkbox    1  3  9
    
    *** Keywords ***
    Click Checkbox 
        [Arguments]  @{Values}
        FOR     ${value}    IN    @{Values}
            ${final xpath}    Evaluate    "${Checkbox}".format("${value}")
            Click Element    ${final xpath}
        END
    

    根据您提供的值,最终的 xpath 将具有以下输出

    (//输入[@class='ant-checkbox-input'])[1], (//input[@class='ant-checkbox-input'])[3]....(//input[@class='ant-checkbox-input'])[9]

    或者你可以使用下面的方法

    *** Settings ***
    Library    Browser
    Library    SeleniumLibrary
    
    *** Variables ***
    
    ${Checkbox}   xpath=//input[@class='ant-checkbox-input']
    
    *** Test Cases ***
    
    Click Checkbox 
    
    *** Keywords ***
    
    Click Checkbox 
         # If you dont know how many elements it has,then you can get all the elements and click one by one.
         ${list of elements}  Get Webelements  ${Checkbox}
         For    ${element}   in  ${list of elements}
            Click Element    ${element}
              
    

    【讨论】:

    • 我认为您的解决方案会选中所有复选框?如何将参数传递给专门勾选复选框 1、复选框 3?
    • 我在主帖中添加了“预期脚本:”,我想是这样的,但不知道该怎么做。
    • 我根据您的期望编辑了我的答案,请再次检查。您不需要创建多个变量,只需将参数传递给单个变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2020-01-10
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多