Robot框架:如何将变量添加到声明的变量中



如何在robot框架中将变量添加到声明的变量中?

我的脚本中有很多表变量。以下是样本

*** 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

运行脚本时,我的变量无法识别。

免责声明:我不会真正推荐你的方法,最后建议了一些替代方案。

由于执行顺序的原因,该变量未被识别;该框架首先遍历并定义所有变量,然后执行suitesetup关键字,然后执行case-setup,然后执行case中的变量
您可能看到了它的发展方向——您在Variables部分使用了一个var,但此时还没有运行任何关键字,Set Suite Variable也没有执行;例如,您正在使用一个未定义的变量。

有人可能会说;好的,我将为${New_Count}定义一个占位符,以便定义它;那么在我的情况下,它将被重新定义,并且定位器将是好的";。是的,不是;定位器将被定义一次,当在Variables部分中对其求值时,它将使用占位符值。稍后可以更改${New_Count},但它不会以任何方式更改以前使用的位置(例如,它不用作指针;字符串变量值为"静态"(

那么我们能做些什么呢?

  • 如果您确实想使用这种方法,在计算${New_Count}的值时,还需要重新计算您在其中使用的定位器;并在它们上调用CCD_ 7
  • 另一种解决方案——仅当定位器在一个单独的文件中时——可能是在其上调用Reload Library关键字,迫使框架用${New_Count}的新值重新评估它们的值;但我不知道它支持机器人文件吗,我个人还没有尝试过
  • 您可以将变量放在python文件中,该文件调用BuiltIn().get_variable_value('${New_Count}')并返回动态计算的值
  • 我个人喜欢使用类似1&3,但在RF-创建关键字";Return Selenium Locator For Element BlahBlah",它使用占位符定位器-从未直接用于其他任何东西,根据条件/参数(如计数变量(对其进行修改,并返回准备好的定位器。然后调用方可以将其用于Selenium关键字,也可以不用于其他关键字。(我想我有一篇老帖子,详细介绍了如何以及为什么,解释了其他好处——比如这个关键词如何也能验证元素是否真的存在,等等。(

最新更新