如何使用参数将多个变量重构为一个?
Posted
技术标签:
【中文标题】如何使用参数将多个变量重构为一个?【英文标题】: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>
【问题讨论】:
【参考方案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? 我在主帖中添加了“预期脚本:”,我想是这样的,但不知道该怎么做。 我根据您的期望编辑了我的答案,请再次检查。您不需要创建多个变量,只需将参数传递给单个变量以上是关于如何使用参数将多个变量重构为一个?的主要内容,如果未能解决你的问题,请参考以下文章