如何用单行语句替代多条Robot Framework的Replace String命令?
问题场景
以下是Robot Framework中的多条字符串替换操作:
${rowNum} Convert To String ${iRowNum} ${ScheduledJobManager_T1_Col_1_Row_i} Replace String ${ScheduledJobManager_T1_JobID} <rowNum> ${rowNum} ${ScheduledJobManager_T1_Col_3_Row_i} Replace String ${ScheduledJobManager_T1_JobName} <rowNum> ${rowNum} ${ScheduledJobManager_T1_Col_5_Row_i} Replace String ${ScheduledJobManager_T1_CreatedBy} <rowNum> ${rowNum} ${ScheduledJobManager_T1_Col_10_Row_i} Replace String ${ScheduledJobManager_T1_ViewDetails} <rowNum> ${rowNum}
提问:上述多次使用Replace String的操作是否可以整合为单行语句?
解决方案
可以整合,但原生Replace String关键字本身是单条执行的,没法直接把多个替换写在一行,不过可以通过两种方式实现批量处理,减少重复代码:
1. 自定义封装关键字(推荐,可读性高)
把重复的替换逻辑封装成一个自定义关键字,只需调用一次就能完成所有替换:
*** Keywords *** Batch Replace RowNum Placeholder [Arguments] @{var_pairs} :FOR ${source_var} ${target_var} IN @{var_pairs} \ ${source_var} Replace String ${target_var} <rowNum> ${rowNum} *** Test Cases *** YourTestCase ${rowNum} Convert To String ${iRowNum} Batch Replace RowNum Placeholder ... ${ScheduledJobManager_T1_Col_1_Row_i} ${ScheduledJobManager_T1_JobID} ... ${ScheduledJobManager_T1_Col_3_Row_i} ${ScheduledJobManager_T1_JobName} ... ${ScheduledJobManager_T1_Col_5_Row_i} ${ScheduledJobManager_T1_CreatedBy} ... ${ScheduledJobManager_T1_Col_10_Row_i} ${ScheduledJobManager_T1_ViewDetails}
2. 用Evaluate结合Python表达式(紧凑写法)
借助Evaluate关键字调用Python的字典推导式,一次性完成所有替换,不过可读性稍弱:
${rowNum} Convert To String ${iRowNum} ${replace_pairs}= Create Dictionary ... ${ScheduledJobManager_T1_JobID}=${ScheduledJobManager_T1_Col_1_Row_i} ... ${ScheduledJobManager_T1_JobName}=${ScheduledJobManager_T1_Col_3_Row_i} ... ${ScheduledJobManager_T1_CreatedBy}=${ScheduledJobManager_T1_Col_5_Row_i} ... ${ScheduledJobManager_T1_ViewDetails}=${ScheduledJobManager_T1_Col_10_Row_i} ${updated_vars}= Evaluate {k: v.replace('<rowNum>', "${rowNum}") for k, v in ${replace_pairs}.items()}
之后可以通过${updated_vars}[${ScheduledJobManager_T1_JobID}]这类方式获取替换后的变量值。
内容的提问来源于stack exchange,提问作者Swapneil Basutkar
相关产品推荐
相关产品推荐

