机器人框架:如何将变量添加到声明的变量中
Posted
技术标签:
【中文标题】机器人框架:如何将变量添加到声明的变量中【英文标题】:Robot framework : how to add variable to your declared variable 【发布时间】:2021-09-01 19:59:43 【问题描述】:如何在机器人框架中为你声明的变量添加变量?
我的脚本中有很多表变量。下面是一个示例
*** Variable ***
$Amount1_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[4]/div/table/tbody/tr[3]/td
$Amount2_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[6]/div/table/tbody/tr[3]/td
$CounterParty_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[90]/div/table/tbody/tr[3]/td
$CurrencyPair_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[76]/div/table/tbody/tr[3]/td
$SpotRate_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[13]/div/table/tbody/tr[3]/td
然后在我的测试用例中,我使用get element count
来计算我的表格行并将其用于我的变量,如下例所示
$Count get element count xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table
set suite variable $New_Count $Count
现在我将$New_Count
变量用于我声明的变量,如下例所示
*** Variable ***
$Amount1_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[4]/div/table/tbody/tr[$New_Count]/td
$Amount2_Column xpath=//div[@id='*GFtable***0***EventDealDataValidationMask***report***unfixedData']/table/tbody/tr[1]/td[6]/div/table/tbody/tr[$New_Count]/td
运行脚本时,我的变量无法识别。
【问题讨论】:
【参考方案1】:免责声明:我不会真正推荐您的方法,最后建议了一些替代方案。
由于执行顺序,该变量无法识别;框架首先遍历并定义所有变量,然后执行套件设置关键字,然后是案例设置,然后是案例中的那些。
您可能会看到它的走向——您在变量部分使用了一个 var,但此时尚未运行任何关键字,并且尚未执行 Set Suite Variable
;例如您正在使用未定义的变量。
有人可能会说,“好的,我将为$New_Count
定义一个占位符,这样它就被定义了;然后在我的情况下它会被重新定义,并且定位器会很好”。是的,没有;定位器将被定义一次 - 当它在变量部分进行评估时,并将使用占位符值。您稍后更改$New_Count
- 但它不会以任何方式更改之前使用它的位置(例如,它不用作指针;字符串变量值是“静态的”)。
那么有什么办法呢?
如果您确实想使用这种方法,在计算$New_Count
的值时,您还需要重新计算您使用它的定位器;并给他们打电话Set Suite Variable
。
另一种解决方案 - 仅当定位器位于单独的文件中时 - 可能是在其上调用 Reload Library
关键字,强制框架使用新值 $New_Count
重新评估它们的值;但我不知道它是否支持.robot文件,我个人没有尝试过。
您可以将变量保存在 python 文件中,该文件调用 BuiltIn().get_variable_value('$New_Count')
并返回动态计算的值。
我个人喜欢使用 1 和 3 之类的东西,但在 RF 中 - 创建关键字“Return Selenium Locator For Element BlahBlah”,它使用占位符定位器 - 从未直接用于其他任何内容,请根据条件/参数对其进行修改(就像你的计数变量)并返回准备好的定位器。然后调用者可以将它用于硒关键字,或者不使用它。(我想我有一篇旧帖子详细说明了如何以及为什么,解释了其他好处 - 比如这个关键字还可以验证元素是否实际存在等)
【讨论】:
不错!谢谢先生,现在我知道为什么它不起作用了。以上是关于机器人框架:如何将变量添加到声明的变量中的主要内容,如果未能解决你的问题,请参考以下文章