51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5656|回复: 16
打印 上一主题 下一主题

[原创] 如何获取对象属性outerhtml中的子属性的值

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-8-6 15:41:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠们,
       小妹现在想要检查用户输入的邮件格式是否有效,如果没效的话,就会在旁边出现一个error message。这个检验是在前台处理的,此error message用的是HTML的label。系统是使用此label里的outerhtml属性下的一些子属性来控制是否显示error message,具体如下,

当邮件格式正确时,此label的outerhtml属性值为:<SPAN class=iInputErrorNote id=ctl00_ContentPlaceHolder1_RegularExpressionValidator1 style="DISPLAY: none; WIDTH: 100%; COLOR: red" display="Dynamic" isvalid="true" c errormessage="Invalid Email format." focus validati>Invalid Email format.</SPAN>

当邮件格式不正确时,此label的outerhtml属性值为:<SPAN class=iInputErrorNote id=ctl00_ContentPlaceHolder1_RegularExpressionValidator1 style="DISPLAY: inline; WIDTH: 100%; COLOR: red" display="Dynamic" isvalid="false" c errormessage="Invalid Email format." focus validati>Invalid Email format.</SPAN>

现在问题就是我该如何将这两个值取出来啊?不可能使用那些截取字符串的方法吧? 不知各位大侠有何高见?谢谢了~~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-8-6 15:47:39 | 只看该作者
object.getelementbyid("ctl00_ContentPlaceHolder1_RegularExpressionValidator1 ").style
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-8-6 17:53:14 | 只看该作者
getelementbyid是指run-time object methods吗?
不一定有的啊
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-8-7 00:38:05 | 只看该作者
原帖由 没有蛀牙 于 2008-8-6 17:53 发表
getelementbyid是指run-time object methods吗?
不一定有的啊

对于web系统,QTP支持DOM的访问,就是通过object来进行的,所以getelementbyid这个方法肯定有的
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-8-7 09:14:02 | 只看该作者

回复 2# 的帖子

这个应该可以。风流果然不同。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-8-7 09:16:42 | 只看该作者
Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
If WinHttp Is Nothing Then Set WinHttp = CreateObject("WinHttp.WinHttpRequest")
WinHttp.Open "get", "http://bbs.51testing.com/forum-69-1.html",false
WinHttp.Send
arrArray = WinHttp.responsetext
msgbox arrArray
Set WinHttp = Nothing
Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分大小写。
   regEx.Global = True   ' 设置全局替换。
   Set Matches = regEx.Execute(strng)   ' 执行搜索。
   For Each Match in Matches   ' 遍历 Matches 集合。
      RetStr = RetStr & Match.Value
      RetStr = RetStr &vbCRLF
   Next
   RegExpTest = RetStr
End Function
regpatrn = "(\w+)\(\'(\w+)\'\,\s(\w+)\,\s(\d+)\)\;"
aim=(RegExpTest(regpatrn,arrArray ))
Set fso=createobject("scripting.filesystemobject")
Set text=fso.createtextfile("f:\nothing.txt",true)
text.writeline aim
找到原文件然后使用正则表达在把获取的内容写到文本
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-8-7 10:32:20 | 只看该作者
呵呵,楼上的方法好牛啊,竟然用到了正则~~~~

二楼所说的getelementbyid()方法好像不行啊,我将此方法添加到脚本中,运行时QTP出现error,说不支持此方法。然后我在run-time object methods中也没有找到此方法,
不过找到了一个比较相似的方法getElementsByTagName(),试了一下,还是不行。

不知各位大侠还有啥高见指教一下,小妹先谢过啦~~~
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-8-7 10:58:26 | 只看该作者
感觉你这样做是舍简取繁阿,
如果你要判断邮件输入格式是否正确
可以直接用正则表达式
或者判断errormessage是否存在
大可不必到源文件里去看它的display属性阿
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2008-8-7 11:09:36 | 只看该作者
我现在是想来检验一下系统的行为是否正确,就是说当邮件格式正确时,error msg 是否没显示;而当邮件格式错误时,是否显示了error msg。
所以我事先把邮件的格式用正则表达式先检查一遍,如果说是正确的,那就应该再判断错误信息是否没显示,如果是错误的,那就判断错误信息是否显示了。
然后把这最终的结果输出来。与自己的预期结果对比一下就可以知道系统是否正确了。
不知这样是否舍简取繁了??? 因为是第一次真正将QTP运用到实际系统中,所以不清楚实际中大侠们是怎么来处理类似此类的情况了。。。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-8-7 11:11:53 | 只看该作者
同意楼上的观点,直接在页面上判断是否存在这个error message text,
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2008-8-7 11:14:38 | 只看该作者

回复 5# 的帖子

谢谢zte_boy版主提供的getElementById()方法啊,现在解决啦。
刚才用它遇到问题,是因为没认真了解此方法的用法

把脚本贴出来,供后来人参考参考啊~~~
Set  htmDoc = Browser("3PL - Domestic - User").Page("3PL - Domestic - New Service").Object
    errorDisplay = htmDoc.getElementById("ctl00_ContentPlaceHolder1_RegularExpressionValidator1").style.display
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2008-8-7 11:18:48 | 只看该作者

回复 11# 的帖子

楼上说直接在页面上判断是否存在这个 error message text。
不知该用什么方法来判断是否存在这个 error msg text呢?
我原来也是打算这样做的,但是我不知怎么来判断?难道是用检查点吗?

BTW,此error msg text使用的是HTML 控件。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2008-8-7 11:19:58 | 只看该作者
呵呵,我就说嘛,怎么可能会没有这个方法呢,仔细再仔细,
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2008-8-7 11:20:42 | 只看该作者
原帖由 假装不在 于 2008-8-7 09:14 发表
这个应该可以。风流果然不同。

你又跑来灌水!该打!
明明天天在,还假装不在
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2008-8-7 13:22:17 | 只看该作者
斑竹本猛
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2008-8-7 13:45:38 | 只看该作者
'这里我随便在对象仓库里改变了一个属性做实验用的,我把URL的VALUE改为outerhtml属性值了就是LZ指的:
'<SPAN contentPlaceHolder1_RegularExpressionValidator1 style="DISPLAY: none; WIDTH: 100%; COLOR: red" display="Dynamic" isvalid="true" c errormessage="Invalid Email format." focus validati>Invalid Email format.</SPAN>

b=browser("如何获取对象属性outerhtml中的子属性的值").Page("如何获取对象属性outerhtml中的子属性的值").GetROProperty("url")
print b
'打印出来的结果为:<SPAN class=iInputErrorNote id=ctl00_ContentPlaceHolder1_RegularExpressionValidator1 style="DISPLAY: none; WIDTH: 100%; COLOR: red" display="Dynamic" isvalid="true" c errormessage="Invalid Email format." focus validati>Invalid Email format.</SPAN>

'进行分割字符串,我看了一下你的字符串除了你所说的值改变其它的不变我使用下面2次分割
'第一次获取字符串ExpressionValidator1后面的所有字符
arr=split(b,"ExpressionValidator1 ")
'打出ExpressionValidator1后面的所有字符
print arr(1)

'第二次获取WIDTH:前面的所有字符
arr1=split(arr(1)," WIDTH: ")
'得到你要的结果 style="DISPLAY: none
print arr1(0)
'斑竹的方法比我好很多我也实验了下 很不错 我这样做比较笨了 呵呵 给大家看看  共同学习 共同提高

[ 本帖最后由 lingxin5013 于 2008-8-7 13:48 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2008-8-7 14:39:12 | 只看该作者
看来我跟楼上的一下,也是用这种笨办法呀
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-13 20:36 , Processed in 0.089878 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表