51Testing软件测试论坛

标题: 如何处理会动态变化的对像 [打印本页]

作者: angelia_liu    时间: 2008-9-9 16:24
标题: 如何处理会动态变化的对像
我的问题是这样的:

      如附件所示,我要对 Web element 对像 "Hot Brands"进行编辑. "Hot Brands"里面包括order之类的属性,当对这些属性进行修改之后, "Hot Brands"也发生了变化.因此回放的时候出现错误,找不到这个对像了.请指教如何解决这个问题. 谢谢

      以下是我录制的脚本:其中100,99之类的数字为order. "Hot Brands"他还有一个属性cartridge id, 录制的时候没有把这个信息捕获到,请问该项如何把这个属性捕获到呢?这个ID是惟一的。

Browser("Merchandising Tool").Page("Page").WebElement("Hot Brands : 100").Click
Browser("Merchandising Tool").Page("Page").WebElement("Hot Brands : 100").Click
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_CatDescription").Click
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_CatDescription").Set "test1"
Browser("Merchandising Tool").Page("Page").WebButton("Save").Click
Browser("Merchandising Tool").Page("Page").WebElement("Hot Brands : 100").Click
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_Order").Click
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_Order").Set "99"
Browser("Merchandising Tool").Page("Page").WebButton("Save").Click
Browser("Merchandising Tool").Page("Page").WebElement("Hot Brands : 99").Click
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_CatName").Click
Browser("Merchandising Tool").Page("Page").Link("Logout").Click
Browser("Merchandising Tool").Page("Merchandising Tool_2").Sync
Browser("Merchandising Tool").Close
作者: chenyb85    时间: 2008-9-9 18:06
提供一下你要处理的“WebElement”的html源码,这样比较好明确问题。
作者: lantianwei    时间: 2008-9-9 18:16
正则表达式
作者: pbng    时间: 2008-9-9 18:32
用描述性编程就可以解决了
作者: angelia_liu    时间: 2008-9-10 09:47
原帖由 chenyb85 于 2008-9-9 18:06 发表
提供一下你要处理的“WebElement”的html源码,这样比较好明确问题。


是这个吗?
作者: angelia_liu    时间: 2008-9-10 09:48
原帖由 lantianwei 于 2008-9-9 18:16 发表
正则表达式


我试了,但没成功,不知道是不是我用错了
作者: chenyb85    时间: 2008-9-10 10:19
先试一下以下这个。如果不行的话,那请提供源代码。就是页面上点击右键,“查看源码文件”中有关此控件的那段程序。
Browser("Merchandising Tool").Page("age").WebElement("html tag:=SPAN","innertext:=Hot.*Brands.*(\d*)").click
作者: angelia_liu    时间: 2008-9-10 10:23
原帖由 chenyb85 于 2008-9-9 18:06 发表
提供一下你要处理的“WebElement”的html源码,这样比较好明确问题。



是这个吧: 那个cCartridgeID是惟一的,但是录制的时候没有录制下来.
<span class="active_tree" id="db_cartridgeID_contentTypeID" title="%7B%22cImageID%22%3A0%2C%22cAppID%22%3A102003%2C%22cMenuText%22%3A%22Hot%20Brands%22%2C%22cOrder%22%3A99%2C%22cCartridgeID%22%3A341502%2C%22cArchiveApp%22%3A0%2C%22cMenuTypeID%22%3A1%2C%22cCartridgeDescription%22%3A%22test1%22%2C%22cActionID%22%3A0%2C%22cEndDate%22%3Anull%2C%22woymNode%22%3Anull%2C%22cContentTypeID%22%3A8%2C%22cMenuID%22%3A152610%2C%22cStartDate%22%3A%2207%2F25%2F2008%2022%3A00%3A00%22%7D">Hot Brands : 99</span>
作者: chenyb85    时间: 2008-9-10 10:36
你可以直接用手动的方式修改识别此控件的属性,这个就不讲了。就是工具的应用。
也可以用描述性编程:
如,试一下吧
Browser("Merchandising Tool").Page("Page").WebElement("html tag:=SPAN","html id:=db_cartridgeID_contentTypeID").Click

顺便提一句,如果使用描述性编程,默认是识别正则表达式的。如果不想让其识别为正则表达式,则要进行转义或设置“RegularExpression”.
作者: angelia_liu    时间: 2008-9-10 10:43
原帖由 chenyb85 于 2008-9-10 10:19 发表
先试一下以下这个。如果不行的话,那请提供源代码。就是页面上点击右键,“查看源码文件”中有关此控件的那段程序。
Browser("Merchandising Tool").Page("age").WebElement("html tag:=SPAN","innertext:=Hot. ...


嗯,真的可以了耶,谢谢哦.
请问这是什么方法?
如果我要编辑这个element的名字又要怎么做呢?也就是innertext变了
作者: chenyb85    时间: 2008-9-10 10:50
建议还是少用“innertext”来识别吧。除非“innertext”的值是比较稳定的或是有规则的。
上面用到的是描述性编程,而默认是支持正则表达式的。也用到正则表达式“Hot.*Brands.*(\d*)”
----------------------------------------------
“如果我要编辑这个element的名字又要怎么做呢?也就是innertext变了”
这个没看懂要问什么。
你还是试一下以下这个能不能用,能用就用这个:
Browser("Merchandising Tool").Page("age").WebElement("html tag:=SPAN","html id:=db_cartridgeID_contentTypeID").Click
-------------------------------------------------
建议先把“Main_Users_Guide”完整且仔细的看一遍。此文档,本论坛搜搜就有。

呵呵。有空多交流哦。共同提高测试的地位。
作者: angelia_liu    时间: 2008-9-10 10:51
原帖由 chenyb85 于 2008-9-10 10:36 发表
你可以直接用手动的方式修改识别此控件的属性,这个就不讲了。就是工具的应用。
也可以用描述性编程:
如,试一下吧
Browser("Merchandising Tool").Page("Page").WebElement("html tag:=SPAN","html id:=db_cart ...


用Browser("Merchandising Tool").Page("Page").WebElement("html tag:=SPAN","html id:=db_cartridgeID_contentTypeID").Click 不行,因为db_cartridgeID_contentTypeID不是惟一的,其他的WebElement也有这个属性.

谢谢您的耐心指导
作者: chenyb85    时间: 2008-9-10 11:01
那你的“innertext”值有规则吗?
即<span> 和 </span>之间的值是否都符合上面的正则表达式“Hot.*Brands.*(\d*)”,否则会不识别的哦。
作者: angelia_liu    时间: 2008-9-10 11:05
标题: 回复 13# 的帖子
innertext可能没有规则,因为我可能会对WebElement的名称进行编辑,也就是把Hot Brands改为其他的名字
作者: chenyb85    时间: 2008-9-10 11:11
能把这一块的界面截图发上来不?然后注明你要点击的点,并注明哪些是不动点或是有规则点。这样才好写适应性更好的代码。

[ 本帖最后由 chenyb85 于 2008-9-10 11:12 编辑 ]
作者: angelia_liu    时间: 2008-9-10 11:20
原帖由 chenyb85 于 2008-9-10 11:11 发表
能把这一块的界面截图发上来不?然后注明你要点击的点,并注明哪些是不动点或是有规则点。这样才好写适应性更好的代码。



我要执行的操作是:
1. 点击 "Hot Brands", 然后下面就会出现有关他的相关信息.
2. 对"category name"进行编辑,也就是编辑"Hot Brands"把他改为其他的名字.
3. 点击"SAVE" button进行保存
作者: chenyb85    时间: 2008-9-10 11:32
根据这张图片和上面的聊天,个人感觉不适合直接识别这个控件。
但有一个问题,开发居然把控件“id”弄成一样的?这样不大好哦。

提供我的一点思路:首先,你怎么确定你要点的是哪一个“WebElement“,有什么特性?
点击后下面的编辑框是怎么识别并进行得理的?
查看一下,是不是有和主键类似的东西。
要真不行,可以扩展到旁边的对象,然后再通过旁边的对象获取要点击的对象。

[ 本帖最后由 chenyb85 于 2008-9-10 11:50 编辑 ]
作者: chenyb85    时间: 2008-9-10 11:34
加QQ聊吧。不然这样太慢了。
作者: angelia_liu    时间: 2008-9-10 13:58
我们公司只能用MSN: lxjbiscuit@hotmail.com
作者: angelia_liu    时间: 2008-9-10 14:03
原帖由 chenyb85 于 2008-9-10 11:32 发表
根据这张图片和上面的聊天,个人感觉不适合直接识别这个控件。
但有一个问题,开发居然把控件“id”弄成一样的?这样不大好哦。

提供我的一点思路:首先,你怎么确定你要点的是哪一个“WebElement“,有什么特性 ...


录制的时候代码里显示的是WebElement的category name 和 order.
Browser("Merchandising Tool").Page("Page").WebElement("Voice Tones : 4").Click

其实识别这个WebElement的惟一标识是他的cartridge ID,但是在这个在录制的时候没有录制下来.
关于下面的编辑框直接点击这个"WebElement'就可以出来.
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_CatName").Click
Browser("Merchandising Tool").Page("Page").WebEdit("edtCat_CatName").Set "Voice Tones edit"
Browser("Merchandising Tool").Page("Page").WebButton("Save").Click

[ 本帖最后由 angelia_liu 于 2008-9-10 14:05 编辑 ]
作者: chenyb85    时间: 2008-9-10 17:41
不好意思,公司不能上MSN。
要是不涉及机密的话,可以把提供的控件的源码范围扩大一下。如,此控件源码旁边的源码。估计这一个是多层控件嵌套的。
作者: angelia_liu    时间: 2008-9-11 11:11
其实我们这个也就是一个树型目录,他旁边的跟他一样.
作者: chenyb85    时间: 2008-9-11 13:14
但是你给的源码是<span>但有可能其外面也嵌着div等等。。。。
作者: angelia_liu    时间: 2008-9-17 16:14
呵呵,终于解决了这个QTP的问题了.
解决方法如下:
tools->object identification,选择环境:Web,然后找到webElement.如附件所示,在主属性里添加一个属性(惟一的)
更改完之后再重新录制就可以了.
作者: angelia_liu    时间: 2008-9-24 15:44
现在发现其实这个问题还是没解决,回放的时候还把对像搞错了.这是为什么呢?




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