shotstar 发表于 2008-11-12 23:56:31

分享一下今天用QTP发现的2个比较好的方法

今天碰到很多问题,主要在控件识别上,有我昨天问的同一个控件名字会变的情况,也有两个控件的属性基本一样的,还有日历控件的文本框不能输入的问题。
1、ChildObjects的妙用,可以说,上面无论是同一个控件名字会变还是两个控件名称一样的问题都可以搞定。
控件会变的问题情况请看我另一个帖子里。
两个控件名称一样,我的一个页面两个webbutton,name、text等值都一样,不同的只有一个很长一串的有代码有css设置的字符串,如果用那么长一串的去用描述性编程来识别很麻烦,之前是用坐标,发现窗口移动以后识别不到了。
于是翻帮助,看到了ChildObjects,这个是我这几天一直想找的,也算是一种识别对象的方法。会返回一个控件数组。问题顺利搞定了,连控件名字会变的也搞定了,不需要知道他的名字,只要知道他是第几个就行了,下面是帮助的内容。
Sub ChildObjects_Example()
'The following example uses the ChildObjects method to find all the
'list objects on a Web page, and then to select an item in each list.

Set oDesc = Description.Create()
oDesc("micclass").Value = "WebList"
Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
NumberOfLists = Lists.Count()
For i = 0 To NumberOfLists - 1
Lists(i).Select i + 1
Next
End Sub

2.给disabled的控件赋值。一般多为webedit,比如日历控件,点击直接弹出日历。我之前的解决办法是写了个函数帮助去点击到我想要的日期。今天忽然看到以前的老员工写的一个案例,一句话就搞定了,我实在佩服。方法就是用object.value赋值。
例如:browser().Page().WebEdit().object.value="2008-11-12"
用set是会报错的,用这个直接就把值给改掉了。

hero001 发表于 2008-11-13 09:29:57

:victory: :victory: 非常不错

龙骑将 发表于 2008-11-13 09:44:25

不错的发现

happychap 发表于 2008-11-13 09:47:03

用.net平台写的程序才能用Object吧,好象。

qishenye 发表于 2008-11-24 14:25:32

:victory:

kou_dou 发表于 2008-11-24 15:11:25

谢谢分享

freend 发表于 2008-11-28 17:55:29

实践失败

各位回此贴的朋友,我练习了一下楼主提供的方法“ChildObjects”,可怎么都没捕捉到对象。请各位及时指教。附上我的脚本:
Set LogItem=Description.Create()
LogItem("name").value="ids"
LogItem("type").value="checkbox"
LogItem("width").value="20"
Set Checkboxes=Browser("Workssys One Network Managemen_2").Page("Workssys One Network Managemen_2").Frame("content_1").ChildObjects(LogItem)
NoOfChildObjs = Checkboxes.Count()
Reporter.ReportEvent micDone, "Number", "The number is:"&NoOfChildObjs
For Counter=5 to NoOfChildObjs-1
          Checkboxes(Counter).Set "ON"

Next

freend 发表于 2008-11-28 18:03:22

我要捕捉的是页面上所有的checkbox, 运行结果中输出变量NoOfChildObjs的值却为0

jifeng 发表于 2008-11-28 18:22:08

回楼上:
你指定的属性太多了,ChildObjects是获得一类对象,然后去遍历这个数组,实现目的。如果用太多的属性,就会失去意义。而且描述时最好用类名,如lz的“WebList",这样就把所有的weblist都取出来了。

jifeng 发表于 2008-11-28 18:24:37

“只要知道他是第几个就行了”,如果已知是第几个,添加个index属性去识别就好了啊?为什么还去用ChildObjects?

freend 发表于 2008-12-1 14:29:11

谢谢“jifeng”的解答;去掉了一些描述属性的确成功了,可按所说的提醒用类名,想把所有页的都取出来确没有成功,不知是要怎么操作?是在描述中加上
LogItem("Class Name").value="WebCheckBox" 吗?(不成功)

现在没取类名,取到的结果只是能取到当前页中的webcheckbox

freend 发表于 2008-12-9 17:50:11

怎么各位大侠没人关注小的的问题了那。能否用ChildObjects遍历出所有页面里的checkbox,现在我实现的结果是只能找到当前页的。急盼各位指教!!
页: [1]
查看完整版本: 分享一下今天用QTP发现的2个比较好的方法