Robot框架:如何向声明的变量添加变量

2024-10-03 04:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在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

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


Tags: reportdivid声明newcounttablecolumn
1条回答
网友
1楼 · 发布于 2024-10-03 04:39:11

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

由于执行顺序,无法识别该变量;框架首先检查并定义所有变量,然后执行suite setup关键字,然后执行case setup关键字,然后执行case中的变量。
您可能看到了它的发展方向——您正在变量部分使用一个var,但此时还没有运行任何关键字,并且Set Suite Variable还没有执行;e、 g.您正在使用未定义的变量

有人可能会说,“好的,我将为${New_Count}定义一个占位符,这样它就被定义了;然后在我的例子中,它将被重新定义,定位器就很好了”。是,不是,;定位器将被定义一次-当它在变量部分被计算时,并且将使用占位符值。您可以稍后更改${New_Count},但它不会以任何方式更改以前使用它的位置(例如,它没有用作指针;字符串变量值是“静态的”)

那么我们能做些什么呢

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

相关问题 更多 >