QTP对Web页面上的文本框赋值的技术大全
上一篇 / 下一篇 2012-11-05 10:41:47 / 个人分类:原创文章
前天一周末班学员说我上课讲太快了,没听懂怎么在一些无法做WebEdit.Set的网页文本框中做赋值(比如下图那种类Office的“富文本输入框”,可能录制不进去,QTP识别为WebElement,很多日历型控件也有类似的问题),
51Testing软件测试网-gE3xQZ
其实我在上课的时候给大家系统性的整理过笔记了。这方面的问题其实特别好解决,网上一堆的文章,最简单的方法莫过于Object.innertext这种手段。但是也有人问说如果这个编辑框不是用js生成的html页面,就没法用innertext了。当然不排除你嵌入的控件是自己开发的,但是其实对QTP来说,其实“传值”是再容易不过的事情了(传值比取值简单的多)。因为你就算不能Set,不能innertext,还可以type啊。又有人说好像网页中的文本框不支持Type方法啊,这个问题我其实也反复提过了,要借“巧劲”。
记得好几年前我教过大家一个技巧,就是Page对象上QTP本来不支持 Text Area Output Value,但是你可以用一些特殊手段来强行的使用这个兼具API和OCR技术的文本获取功能。这个招数其实也是上面所说的“巧劲”,就是“低级别录制(Low Level Recording)”。
好吧,在这里,我放出一个完整的赋值方法大全(也是上课给学员做的笔记)。为了大家有地方试验代码,还是老样子,用百度的首页搜索输入框取代各种复杂多变的输入框——其实原理都是一样的,无所谓哪个网页,下面的方法一定有适合你的。
51Testing软件测试网:bl,V$W2?1r
(零)、
一般在百度首页的输入框录制内容,会生成以下代码:
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe"
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://www.baidu.com/"
Browser("Browser").Page("Page").WebEdit("wd").Set"songfun"
+qA[+@H.CEC6Z0
这里非常美好的是,QTP识别为WebEdit,所以可以赋值。
我现在只是假设你做的项目可能传不进去值,QTP不识别为WebEdit该怎么办?
51Testing软件测试网 Jt-W$Mu,V [Y
(一)、
最多被使用的就是用Object对象的value或者innertext,一般针对HTML这是最简单的,代码如下(为方便大家运行,直接改用描述性编程):
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe"
Browser(":=").Page(":=").Sync
Browser(":=").Navigate "http://www.baidu.com/"
Browser(":=").Page(":=").WebEdit("name:=wd").Object.value= "songfun"
51Testing软件测试网1L,p)g"jF$v
或者
51Testing软件测试网-~3Z{0Zu!ki
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe"
Browser(":=").Page(":=").Sync
Browser(":=").Navigate "http://www.baidu.com/"
Browser(":=").Page(":=").WebEdit("name:=wd").Object.innerText= "songfun"
51Testing软件测试网 a0D7o3o-Z9ON?+E
需要说明的是,这种方法QTP根本不需要把文本框识别为WebEdit,只要认成WebElement就可以了。这个大家不妨找PhpWind论坛发帖就知道了。
X T,R)E ACZ0
(二)、
超强的“低级别录制”。这个招数基本无敌。即使QTP连innertext都没法用,也可以借助低级别录制搞定!以下我还是用百度做例子(只是假设而已,你换个自己的网页一样解决):
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe"
Browser(":=").Page(":=").Sync
Browser(":=").Navigate "http://www.baidu.com/"
Window("regexpwndtitle:=Windows Internet Explorer","regexpwndclass:=IEFrame").WinObject("regexpwndclass:=Internet Explorer_Server").Click 431,187
wait 2
Window("regexpwndtitle:=Windows Internet Explorer","regexpwndclass:=IEFrame").WinObject("regexpwndclass:=Internet Explorer_Server").Type"songfun"
BpFd0M0
因为虽然Web上的很多标准控件像WebEdit不支持Type方法,但是在低级别模式下,所有的对象都会被降级识别为WinObject对象(窗体视为Window)。而这个WinObject是支持Type方法的。
s eFD!@V+v|Z~0
(三)、
以上两者方法其实已经足够了!这里只是辅助介绍下其他技术。QTP对于Web页面其实有得天独厚的优势,不仅可以用innertext而且可以直接动态加载JavaScript代码,借用getElementById去设置。查看百度搜索输入框的原始代码:<form. name="f" action="/s">...<input type="text" name="wd" id="kw" maxlength="100" class="s_ipt">...</form>
&_4|&B