51Testing软件测试论坛

标题: 同一脚本里描述性编程对象第二次使用会报错 [打印本页]

作者: 131425god    时间: 2010-7-21 16:04
标题: 同一脚本里描述性编程对象第二次使用会报错
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").WebCheckBox("type:=checkbox", "html id:=ckb_2", "html tag:=INPUT")
我在一个脚本里两次用到下面的对象WebCheckBox,第一次使用没有问题,第二次使用会报以下错误(这个对象在两次使用的时候属性都一样,不知有没有什么好的办法解决)


The "[ WebCheckBox ]" object's description matches more than one of the objects currently displayed in your application. Add additional properties to the object description in order to uniquely identify the object.
作者: 131425god    时间: 2010-7-21 16:49
没人遇到过这个问题么,
作者: skyzhu    时间: 2010-7-21 16:55
提示已经告诉你了,找到了多个匹配的
作者: yujie6832    时间: 2010-7-21 16:56
这种问题的意思就是,有两个一样的控件在一个页面上,必须添加其唯一标识,一般html id:=ckb_2", 就是唯一标识,你两个一样的,肯定出问题
作者: yujie6832    时间: 2010-7-21 16:56
用SPY查看出两个CHECKBOX的不同的HTML ID吧,就没问题了额
作者: 131425god    时间: 2010-7-21 16:57
标题: 回复 3# 的帖子
嗯,因为parent 对象是时刻变化的,所以当时采用的办法是直接取子对象的属性来描述子对象,没想到有两个地方都用到这个对象的时候就报错了,有好的办法解决么
作者: 131425god    时间: 2010-7-21 16:59
可是,两次使用的时候,我在对象库里对比了一下,html id值一摸一样的
作者: 131425god    时间: 2010-7-21 17:02
标题: 回复 5# 的帖子
可是,两次使用的时候,我在对象库里对比了一下,html id值一摸一样的
换句话说其实是调用了几乎相同的东西。只是我是在两个action里用到了,所以第二次再识别这个对象的时候,会有这个问题,我想知道有没有办法解决,迂回解决也行啊
作者: swift19221    时间: 2010-7-21 17:12
标题: 知道这是什么吗
526172211A07003BD07308000D00000000000000317E74C0802C00CD9D1D0000A02400020FEDBF28CF96633C1D350C002000000049504F50332E33312E45584510219114C895A198161A24240201008241012010487027F0040410871C38538D01053818
0C04E0840101412408714204041054541454504608290115820848B158A8A454160B1DA282A222A3B3827B5DEF7BEFBDEF6F01BEFF7DF6BDAF2BCF979F6F27C3573335799ABBBCBBD6B33AEBFCBDF1F5797C1975F9F977977F0BCCAAD556BE3ACAAD3E6D
1F802200FF803009A010A1FE73003F7D0B01AC01FB79EA626F43004C57BA48ED2C1802F7FC858B410E8F96123C84A6E0845C9099298969713191A2484C4989FF90D8D2026123E4D9D992D2453500FF7FFFF6E91F9D7F81EC0A4804AF1937AFF767C02681
4A028BFB115A920A67FD1777D45991D4FFEA244C67FD91D001BFF35F81FEF5FC5801FA8A11BF724AE457FD951FF5644FF141807FFD73FBAE400DE37F056C2FD9F9C0407FDCC05BAFFE76F9B95BED75201FB7A20DFA1593F89FF1DB0DFBD237F1823FB07F
51432FED3FF605BBFFE27F8C8BFD962212C436FFB419FFC72C05EFF0C76B3F8D8CB10F8DFFFE031FFDDFE204AA7EFC25E366A5FF67CAA88FFB199FB227F7593F7C09FFBE40D8B978BFD87DA4FF33590FD82DFED7ED6FF10CAC4CCD3FE3C163F79FFAB1BB
88CC70D48D963A8A1935127FF79FFD7C8FFF5C0D60BFC67B73FB6830AFF7C63646535165BA0007F0FF0C57FB8FDF7EB7E6E8CD4AFF48C6FF8D67FD945FF1247FF7CB807FF7DFBF6F93E687F6328347466C1CD7D7C63EBEBD16F5801EAB6F65BE551E02FC
FA271EB933E9E5F32180900192018FD434A1D4B62325F68921C2663244EEABF498BC2E90C39B9EDEB8FC2512AC64D0F57DBE441EBD816673363422B02C993022BA401F8BDF408EE6A565FDC3EA0053BC32900128DCBBE506C4F80964931A7AD94F32CFBE
A5A873FC804B49F7E49C9824A33E4F751DF4C38E93F3F21699068A35250D093EFED982279AA6AD4599C766A0CFBCDCD1AAE6D518D1C0C820BB2BB66D3DD209D3DBBF646D1B1A3002BEEF3BF1A1A7FDED3459F810E87490A11BB829AB6000501CFE016812
5839FA7FD88E4502FE55D05037EB2D3A2F31F91F0CF7B4BED8A608DE741143D4AAA66E79DB13D2143E4E4595D06E3EB0C17E53179A3F17CBCF91A009350F5CB53964E4DA8BA087E93B0B2E8D5FFA733625A0CA6594750C520C2119D0AC7E69EDB6806C24
58AC402971794A0512E170D3A913A551EEF1E9141898714471CB1F6E96DE3571CC25DF6E6331A810F4FA805EC8EC62804C3598BE4E16039AE905B131DA10EB6CAA342F6FEDCF368792F0D52A2533A876802A723E744DAA66CD0DFE1FDED551CA55DABA06
D754E289F4A759FBC897F77A54A9E53310F844CC7BFCB5FB6F0EFF42795D1D3E0DA75590350B20DA51285165C7F97BBBD705CDA43432A061D74C981C9A4D1CACF63CFF9E3DF16A0616E03812741838C60F33F619331A5B73E3B0DD72C240CE35F4411575
CFB851A6FA38FE29501EE7E9DAC5CB584E9ACB42F99F0F7A88E2C7ADDE6FBE7DB2C51F36C97885A37CF3D8BA71EEBA2609AB76B2584139E8B39BA549AFDD78B2520F7CA25D7AE728EFCCEF41421819138CC2E07F63D5EC8AC02888B5AED98B0FEDCEB9EA
F92C431578CD38390F2D2CA07547803C83E9BAF80746DC9BDCF78636A94B507ED1C276D9D78BF19802939F227374E2E261EC4AC1E72166D8FE7148CBFAF412FCCD8C3B783CC5CA4336998F04E7F739EB4AD9CF158052C165DFB579935BBA8A110B72E006
C2D931B6D5ACF6400B9CB074893754B2D8F7C6185AE998554887E52B1DE3DA03459B806B6620B3F8C80676EA2158CE72A2072E3B90B1B98A3312B3FCE8069FC21D6765B16CABEF48AA4E31D408FB823CB6B65F319353B43269D206706F8E7967275C4B4B
9CFDAE015244DFF98426588E1CEAA9AA30B5941E5DC57A09119C489260B7B60C7589B55C7C7A8B189D531D9B96A65363ABB410AF5FBDA7F2EACF55F9B2951715B63E4F03D68B14352064CB0B7DB5044737EB307225E08F37D9C1BAEB33AB0356B1013C85
0EEFD2D6A2B8EB35B78D1F2F1F2926256C0310200C800D5D74BA084002D5BA00192E8E07490F576359E594D93D80819B96978D92D86C1C64E5A3E065C847C9EE369E28EA5DAF14376CE6ADDEE54775982579182E280BBC5827DCC6258D346B076C585E51
F566E987C9196F26DC004C7C785F1A90B8403E1F700CDF925CB54E207F43FD241E2E9DA19EAEED49E33A208CEFDB938B62FE56EE0A4F8851CEE769D019077B7058148FCF399FBCBA34953F34F7D87BA8990DE8462BA74360E8813386E2DCA53A4CCF55FE
8905AAA4C67DF68C908DDB965EE4D14BCA1670EB9A6A3F25F22DD7951C19F48F9B4E4010E149E2C2C824C8031D7CEEC5D25D00F44A79FC4503AE7A4F0DFD06A7A4640EBF8EF2DCB834AACD0AC509350A056C61E88819B2F87D031A2A6015D77ACD858184
553DABDBA959AE46C3D5F1F1EC696BD6401388912C1D673DB03D84FF53E771786A1C735C907D7F9D8DA985124874A056A5E5B068291AAFBAEEFF9045239A31383485E667A35F90E0560C315750CC9628565DDCF7FD1D52008B61025085C8BEEEE8140C86
005B49DD7A59CF14F79F6CB4F869E538FD099DEA55513C5A29D1DDBC475F5B47078C1F2BCBE2F8D768BF713187149CFD24A3B85F31BDE2C2C887EE4BBBBE77AFBAB45A3CA86266E5E16A04E7ECA39C0674CE2FBE1DA33B0757E24D62F6EAB68110BFB452
E7F93C07CF65026AC33A35E697CC9D7D33F2286914E146D504D2A6D15F48BDDB519A48099B2A6E455C342E06231E2AC226F5FF77B02E854745AC04BA62198F3A37444C314161329119CCC33BCE7CFE9F37E30C23496083CCEE3F0C98F9ED94CEFCE69755
B8D545A35ABA92EB7EAD0D3A389E9C8CA69A1BC00376BF1E42CF465577307F137088AF4E0E8AEEFB64DF9FEF26112AB3C623DC24DDA04BBBA13A53D9998FAA9064729376E453A9499538B74CEF3DD5D29575225173F1193133BF9D782876D71E22B39C1D
A8FD5D214A11250EDF9F49EC5AE3F901759BE9E85D30E497C42E755BB79E4E650CD31656C0A56B8762FFCFDD2A4EB467C3CDF3DE4756EBCA052D37308A54B32091EF6C1A0C75558DA17AD2FAD43332C52FA3371CEF1B6B3CCF31AA622A485A0264AF9AE5
作者: skyzhu    时间: 2010-7-21 17:14
单选  多选  和其他控件不同,同样的ID应该是表示一组控件
排除文字属性以外,用上 index 属性才能区分
作者: 131425god    时间: 2010-7-21 17:16
标题: 回复 10# 的帖子
可是我在对象库里看了下对象WebCheckBox,没发现有这个index属性- -!
作者: skyzhu    时间: 2010-7-21 17:37
是有的,仔细看一下
加上试试实际效果,值是从0开始一直向上+1的
index:=0
index:=1
index:=2
作者: yujie6832    时间: 2010-7-22 10:59
不过根据刚才这个朋友给我的短信,他说,他两次用的是同一个控件。。。就不存在INDEX的区分啊
作者: yujie6832    时间: 2010-7-22 10:59
看来我要请教我师父去了,哈哈
作者: skyzhu    时间: 2010-7-22 11:02
标题: 回复 13# 的帖子
可能只是隐藏了第1个,出现了第2个而已,index还是会变的,表面看是一个
分析JS的操作就明白了
作者: yujie6832    时间: 2010-7-22 11:05
恩,是的,也有可能,那如果这样的话,INDEX就能用了,不过我在自动化的实施中,一般不到逼不得已,不喜欢用INDEX,我总觉得不可靠,呵呵,可能是个人习惯吧
作者: yujie6832    时间: 2010-7-22 11:08
这个纠结的问题,我刚才请教了我的老师,他这么说:

第一次使用没问题,说明第一次的操作能识别到,而经过某些操作后,页面上对象发生变化,识别不了,应该他的操作步骤引起的
让他把完整脚本贴上来
提供信息太少了



然后,他也觉得INDEX是没有办法的办法,呵呵
作者: yahuu    时间: 2010-7-22 11:14
页面本来就不是死的,是会根据操作变化的

按照上面的提示,肯定是匹配了多个,加index是肯定要的,不是没办法的办法
因为动态变化的,到底是不是你需要的,你还要判断
作者: yujie6832    时间: 2010-7-22 11:16
标题: 回复 18# 的帖子
那到不是一定要,呵呵,可以动态给控件加唯一属性标识的,就不用INDEX了,当然,我也没看过实际项目,所以不敢妄下定论,不过INDEX是肯定可以的,但是我觉得靠一堆数字不可靠,我习惯性的还是会考虑将来的维护阶段
作者: 131425god    时间: 2010-7-22 11:47
标题: 回复 19# 的帖子
下面是action1 ‘ 完成copy的操作
Dim i,test,mydescription,mydescription1
wait 2
DbTable("DbTable").Output CheckPoint("DbTable")

Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").VirtualObject("object_Action_new spec").Click 49,11
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("issueList").WebElement("Copy...").FireEvent "onmouseover"
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("issueList").WebElement("Copy...").FireEvent "onmouseout"
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("issueList").Link("Link").Click

Set test=Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise")
Set mydescription=Description.Create()
Set mydescription1=description.Create()
mydescription("type").value="checkbox"
mydescription("html id").value="ckb_2"
mydescription1("type").value="button"
mydescription1("class").value="btn_ok"
If  test.WebCheckBox(mydescription).GetROProperty("checked")<>"on" Then
        test.WebCheckBox(mydescription).Set "ON"                       ‘ 选择folder
End If

test.WebButton(mydescription1).Click                                 ’点击保存按钮,copy 完成
set mydescription=nothing
set mydescription1=nothing
set test=nothing



Action2       ’完成move操作
Dim test,a
wait(2)
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").VirtualObject("object_Action_new spec").Click 51,10
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("issueList").WebElement("Move To...").FireEvent "onmouseover"
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("issueList").WebElement("Move To...").FireEvent "onmouseout"
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("issueList").Link("Link").Click
Set test=Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise")

a=test.WebCheckBox("type:=checkbox", "html id:=ckb_2").GetROProperty("checked")
If  a<>"on" Then
        test.WebCheckBox("type:=checkbox", "html id:=ckb_2").Set "ON"            ‘选中和copy操作时一样的folder
End If

Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").WebButton("type:=button", "class:=btn_ok").Click    ’点击保存按钮,move完成

set test=nothing
Browser("TechExcel KnowledgeWise").Page("TechExcel KnowledgeWise").Frame("topframe").WebButton("WebButton").WaitProperty "Visible", true, 100000

[ 本帖最后由 131425god 于 2010-7-22 11:52 编辑 ]
作者: 131425god    时间: 2010-7-22 11:49
我把一个脚本里的两个action都粘贴出来了,加粗部分就是关键的地方,
作者: skyzhu    时间: 2010-7-22 16:27
标题: 回复 20# 的帖子
再第2句粗体前加上下面的代码,看看到底有几个一样的控件,一点点确定问题
Set mydescription=Description.Create()
mydescription("type").value="checkbox"
mydescription("html id").value="ckb_2"
set bb = test.childobjects(mydescription)
msgbox bb.count
作者: yujie6832    时间: 2010-7-23 10:39
恩,可以这样试试,但是我看了代表,我有一个疑惑,但是也没试过,我先提出来,就是你第一段代码用的是Description.Create()的方法,而第二段直接描述了,会不会导致了这个错误的原因?QTP的机制?如果统一以后会不会真的好了?纯属猜测我描述性编程用的不多,就算用,我也非常喜欢统一,所以这只是我的遐想,怀疑
作者: 131425god    时间: 2010-7-23 11:04
标题: 回复 22# 的帖子
我这样试了, bb。count=2,说明确实运行到这里的时候是找到了两个相同的对象了- -!
作者: yujie6832    时间: 2010-7-23 11:14
标题: 回复 24# 的帖子
那就是业务上引起的原因,第一次使用后,他其实仍然保存在页面上,只是可能你看不到了,下次再使用,自然就同时出现两个了
作者: skyzhu    时间: 2010-7-23 13:20
bb.item(bb.count - 1).Set "ON"
这样应该能操作最新的那个了,试试
要是错了,item编号自己定,找个规律出来
虽然不是直接识别,不过有时候也只有这样了,checkbox是个很麻烦的东西
作者: yujie6832    时间: 2010-7-23 16:45
这应该也算解决问题了,鲜花吧
作者: blueeagle9999    时间: 2010-7-27 15:26
不会两个都是可见的吧,加个visible=True的属性再看看
作者: 131425god    时间: 2010-7-28 17:44
标题: 回复 26# 的帖子
发现运行这个语句的时候,QTP会crash




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2