LoadRunner脚本在SAP GUI VA01填充100行条目失败的解决问询
在SAP GUI VA01中批量填充超过界面显示行数的商品条目
问题描述
我需要在SAP GUI的VA01事务码中填充100行商品条目,编写了如下LoadRunner循环脚本:
for(n=0;n<=99;n++) { lr_save_int(n,"lineitem"); sapgui_table_set_text("({lineitem}, 'Article')", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", "{lineitem}", "1", "{P_Article}", BEGIN_OPTIONAL, // originalid1, // "AdditionalInfo=sapgui1036", END_OPTIONAL); sapgui_table_set_text("({lineitem}, 'Order Quantity')", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", "{lineitem}", "2", "{P_Qty}", BEGIN_OPTIONAL, // originalid2, // "AdditionalInfo=sapgui1037", END_OPTIONAL); sapgui_table_set_text("({lineitem}, 'Un')", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", "{lineitem}", "3", "{P_Unit}", BEGIN_OPTIONAL, // originalid3, // "AdditionalInfo=sapgui1038", END_OPTIONAL); lr_output_message("xbf order type is %s ",lr_eval_string("{P_Article}")); fprintf(file,"xbf order type is %s ",lr_eval_string("{P_Article}")); }
但SAP GUI界面仅显示16行可编辑条目,脚本填充完这16行后就失败,请问如何在到达界面最后一行时继续填充后续条目?
解决方案
核心逻辑
SAP VA01的商品条目表格默认只加载固定数量的可见行,当需要填充超过可见行数的条目时,必须在填充到当前可见最后一行后,触发新增行操作,让界面加载出下一批可编辑行。VA01中新增行的标准操作是点击表格区域的"+"按钮,或使用快捷键F6。
修改后的脚本示例
在循环中加入判断逻辑,当填充到当前可见最后一行时触发新增操作,确保界面始终有可编辑的空行:
// 定义界面可见的最大行索引(16行对应索引0-15) #define MAX_VISIBLE_ROW_INDEX 15 for(n=0;n<=99;n++) { lr_save_int(n,"lineitem"); // 填充商品信息的代码(保留原逻辑) sapgui_table_set_text("({lineitem}, 'Article')", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", "{lineitem}", "1", "{P_Article}", BEGIN_OPTIONAL, // originalid1, // "AdditionalInfo=sapgui1036", END_OPTIONAL); sapgui_table_set_text("({lineitem}, 'Order Quantity')", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", "{lineitem}", "2", "{P_Qty}", BEGIN_OPTIONAL, // originalid2, // "AdditionalInfo=sapgui1037", END_OPTIONAL); sapgui_table_set_text("({lineitem}, 'Un')", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", "{lineitem}", "3", "{P_Unit}", BEGIN_OPTIONAL, // originalid3, // "AdditionalInfo=sapgui1038", END_OPTIONAL); lr_output_message("xbf order type is %s ",lr_eval_string("{P_Article}")); fprintf(file,"xbf order type is %s ",lr_eval_string("{P_Article}")); // 触发新增行的判断逻辑 if(n == MAX_VISIBLE_ROW_INDEX || (n > MAX_VISIBLE_ROW_INDEX && (n - MAX_VISIBLE_ROW_INDEX) % 16 == 0)) { // 方式1:点击新增按钮(需确保对象ID正确,可通过LoadRunner录制获取) sapgui_press_button("Add Item", "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY" ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/" "btnBTN_ADD", BEGIN_OPTIONAL, END_OPTIONAL); // 方式2:使用快捷键F6(如果按钮ID难以获取,优先用此方式) // sapgui_send_key("F6", BEGIN_OPTIONAL, END_OPTIONAL); // 等待界面加载新行,可根据实际系统响应速度调整时间 lr_think_time(1); } }
关键说明
- 判断逻辑:当
n等于当前可见最后一行的索引(MAX_VISIBLE_ROW_INDEX=15),或者后续每填充16行时,触发新增操作,保证界面始终提供可编辑的空行。 - 新增行操作:
- 若能通过录制获取到新增按钮的对象ID,使用
sapgui_press_button更稳定; - 若按钮ID难以定位,直接调用快捷键
F6兼容性更强。
- 若能通过录制获取到新增按钮的对象ID,使用
- 等待时间:添加
lr_think_time(1)确保界面有足够时间加载新行,避免因界面未就绪导致脚本执行失败。
内容的提问来源于stack exchange,提问作者LiviuLazar
相关产品推荐
相关产品推荐

