我有以下css选择器
${Table_Row} css=.tr > td:nth-child(2)
这个选择器将为我提供表格中的第一个实例。问题是该表可能包含数百个实例,并且我不想拥有数百个变量。如何使变量更具动态性,我可以传递另一个变量来确定第n个孩子'算,而不是关键词?
这是我的意思的一个python例子:
table_row = ".tr > td:nth-child(%s)"
然后我调用这个变量
table_row % 5
结果将是
.tr > td:nth-child(5)
答案 0 :(得分:1)
如果这是经常重复的事情,并且您想要集中逻辑而不必处理变量,那么Custom Locator Strategy,
受您问题启发的示例:
*** Test Cases ***
Test Case
Add Location Strategy table Custom Locator Strategy
Page Should Contain Element table=3
*** Keywords ***
Custom Locator Strategy
[Arguments] ${browser} ${criteria} ${tag} ${constraints}
${element}= Get Webelement css=.tr > td:nth-child(${criteria})
[Return] ${element}
这将适用于将定位器作为输入参数的所有关键字。自定义定位器策略只需要返回一个Web元素。
在我的视图中实现内联标准的替代方案,但在我看来是不可读的(留给读者)是使用字符串对象函数。它们在Robot Framework Guide的Advanced Variable Syntax部分及其周围进行了描述:
*** Variables ***
${locator_template} css=.tr > td:nth-child(%)
*** Test Cases ***
TC
Log Locator Template: "${locator_template}"
${locator} Set Variable ${locator_template.replace("%", "9")}
Log Locator Variable: "${locator}"
Log Inline Variable: "${locator_template.replace("%", "9")}"
Log Locator Template: "${locator_template}"
此示例显示如何使用内联对象函数。由于Python String对象具有替换方法,因此它将提供一种替换相同变量的稳定方法,并使用它替换输出以便在关键字中进一步分配。
它将产生以下结果:
Starting test: Robot.String Replace.TC
20180513 12:25:21.057 : INFO : Locator Template: "css=.tr > td:nth-child(%)
20180513 12:25:21.058 : INFO : ${locator} = css=.tr > td:nth-child(9)
20180513 12:25:21.059 : INFO : Locator Variable: "css=.tr > td:nth-child(9)"
20180513 12:25:21.060 : INFO : Inline Variable: "css=.tr > td:nth-child(9)"
20180513 12:25:21.061 : INFO : Locator Template: "css=.tr > td:nth-child(%)"
Ending test: Robot.String Replace.TC
您可以告诉replace函数返回结果,并且不会更新原始字符串。这使得它可以用作可重用模板。