手动关联的问题,请各位指点一下。
录制的脚本可以正常运行。脚本的整体思路是这样。根据手工输入的工号,从数据库中取得ID,再提交结果。我试过不更改手工输入的工号,直接从数据库中取得ID进行参数化,是可以正常运行出结果的。但这样的话,和实际场景有很大差距。我希望场景更真实些,将手工输入的工号做参数化,将ID做手动关联。但是手动关联的时候,一直没有成功。请教一下大家,为什么会失败,如何解决呢?
web_reg_save_param("id", "LB=\"Name=userids\", \"Value=", "RB=,","Search=headers", LAST);
web_submit_data("ResUserAction.do_2",
"Action=http://73.16.17.197:8008/wskp/ResUserAction.do?method=add&flag=U&function_id=26&selects=010127",
"Method=POST",
"RecContentType=text/html",
"Referer=http://73.16.17.197:8008/wskp/system/AddURO.jsp?flag=U&function_id=26&time=20138395056",
"Snapshot=t80.inf",
"Mode=HTTP",
ITEMDATA,
"Name=partuname", "Value=李英俊", ENDITEM,
"Name=userids", "Value={id}", ENDITEM, //员工ID
"Name=partupid", "Value=0101272810", ENDITEM,
"Name=partrids", "Value=168", ENDITEM, //角色
"Name=partupname", "Value=一科", ENDITEM,
"Name=flag", "Value=", ENDITEM,
"Name=id", "Value=0", ENDITEM,
"Name=function_id", "Value=", ENDITEM,
"Name=currentPage", "Value=1", ENDITEM,
"Name=pageSize", "Value=20", ENDITEM,
"Name=partrname", "Value=通用查询", ENDITEM,
"Name=roleids", "Value=168", ENDITEM, //角色
"Name=partadmin", "Value=否", ENDITEM,
"Name=partrnames", "Value=否", ENDITEM,
LAST);
// lr_output_message("id: %s",lr_eval_string("({id}"));
// lr_message("When_Txt: %s",lr_eval_string("({When_Txt}"));
lr_log_message("id :%s" ,lr_eval_string("({id}"));
Action.c(1735): Registering web_url("tj-d.gif") was successful
Action.c(1743): web_concurrent_end was successful, 2496 body bytes, 481 header bytes
Action.c(1746): Registering web_reg_save_param was successful
Action.c(1748): Error -26377: No match found for the requested parameter "id". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size
Action.c(1748): web_submit_data("ResUserAction.do_2") highest severity level was "ERROR", 72 body bytes, 186 header bytes 看半天没懂是怎样一个过程?从数据库中取得ID,怎么想都像是一个验证码 跟踪,答案! 很明显,这个页面提交后才会返回员工id,而你却在‘提交时’参数化员工id;则根本是本末倒置的
因为这个页面提交前,你前面那个关联函数保存的{id}根本还没有获得返回值,
所以这时"Name=userids", "Value={id}", ENDITEM, //员工ID中的{id}是没有值的,自然失败了
如果我没猜错的话,这个提交页面不需要参数{id},直接"Name=userids", "Value=", ENDITEM, 就可以了吧;
你最好把你的原始录制脚本发出来看看 脚本看看,最好开下日志,看下交互过程,左右边界 是通过看日志查到的吗? 脚本贴上了,大家帮忙看一下。 22021300 是工号吧?
查下你的ID是不是在这个脚本提交之后:
web_submit_data("UserAction.do_2",
"Action=http://192.168.17.197:8008/wskp/UserAction.do?method=select&flag=select",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.17.197:8008/wskp/UserAction.do?method=select&flag=select&function_id=26&time=2013839511",
"Snapshot=t75.inf",
"Mode=HTTP",
ITEMDATA,
"Name=userid", "Value=22021300", ENDITEM,
"Name=username_zh", "Value=", ENDITEM,
"Name=function_id", "Value=26", ENDITEM,
"Name=currentPage", "Value=1", ENDITEM,
"Name=pageSize", "Value=20", ENDITEM,
LAST); 回复 7# szyszy2000
22021300是工号,在脚本的第444行进行了查询。查询出了ID,ID在第1756行进行使用,我关联的就是这个1756行的ID。
也就是说,工号是在这个脚本提交之前。 回复 6# zb1119
补充一下:
工号22021300对应的ID是4676
工号22021302对应的ID是4983
工号22021309对应的ID是4998
444行查询的22021300
1756行的结果是:"Name=userid", "Value=4676", ENDITEM, (数据库里根据22021300查询出的4676)
我把4676直接用参数化执行的时候,就直接能运行成功。(直接改成4983,4998等等就可以达到我要求,而不用考虑前面的工号)
我现在想更真实的把4676手工关联,就提示失败。 回复szyszy2000
22021300是工号,在脚本的第444行进行了查询。查询出了ID,ID在第1756行进行使用,我 ...
zb1119 发表于 2013-8-6 15:46 http://bbs.51testing.com/images/common/back.gif
关联是在获得值之前进行注册获取返回值,所以你在444行查出了ID,想在1756行用,那么就在444行之前进行关联 首先,1756行不要参数,直接使用原id,运行看看你上面那个关联能不能取到值,若不能则表示左右边界不对
其次,即使能取到值,你也不能在1756行使用关联参数,因为本页面提交前web_reg_save_param只是注册成功,但还没有取得返回值,不能在本页面使用{id}
其实最大的可能应该是,这个ids不是在这个页面第一次返回的,如果这个工号是登录用户的工号的话,那么可能是在登录时返回的
如果不是登录帐号,那么可能是在某一步使用了这个工号的页面返回的(比如在436行那个页面返回的),你去第436行的页面找找它的返回信息
你应该在第一次返回这个id之前关联,而不是在要使用这个id的时候才关联 回复 10# szyszy2000
如果1756直接使用ID,是能取到值的。
从脚本里搜过,只搜到这一个4676,所以我觉得是第一次出现的。 回复 12# zb1119
不是从脚本中搜,而是从生成日志generation log中搜第一次出现的位置,然后定位这个位置对应的页面是哪个;再到对应页面中做关联,如图
你说id在444行查询的,你就到444行的页面中去找,
如果你不能确定第一次出现的位置的话,你就在runtime setting打开扩展日志勾选全部,然后回放一次,在回放日志中搜索那个id。右键跳到对应行就是了 回复 13# 398073412
感谢你的帮助。的确通过generation.log中能查询到4676,可是如何定位这个位置对应的页面呢?
页:
[1]