51Testing软件测试论坛

标题: 求助:有关文本框的颜色问题 [打印本页]

作者: gaoy_b    时间: 2009-1-15 17:13
标题: 求助:有关文本框的颜色问题
求助:有关文本框的颜色问题
问题:如图2
问题描述:文本框“节点编号”是必添项,如果为空,点击提交,文本框“节点编号”会变成粉红色。这个颜色属性是写在CSS中,通过JS调用在文本框“节点编号”为空的条件下会变成粉红色,在JS中<input id="directoryVO.c_name" class="textfield" type="text" style="width: 498px;" validation="{maxLength:255,specialWord:'all'}" required="true" value="" name="directoryVO.c_name"/>
</div>在这里validation="{maxLength:255,specialWord:'all'}" required="true"两句是调用CSS在什么情况下改变颜色。在html中也没有有关颜色的信息。
用 object Spy查看 测试对象属性根本没有有关颜色的属性,查看 运行时对象属性,它的 currentStyle和Style是object
我曾试图用set oObj=Browser("SkillBase 4.0 -").Page("SkillBase 4.0 - ").Frame("attribute_2").WebEdit("directoryVO.c_serialnum").Object
CheckColor = oObj.currentStyle.color\backgroundcolor取出的颜色为黑色或透明色

请问:在这种情况下,用QTP怎样校验?
作者: ts47284    时间: 2009-1-15 17:26
路过帮顶了呀
作者: asoqa    时间: 2009-1-15 17:53
试试看
set oObj=Browser("SkillBase 4.0 -").Page("SkillBase 4.0 - ").Frame("attribute_2").WebEdit("directoryVO.c_serialnum").Object.style
msgbox oObj.backgroundColor
作者: gaoy_b    时间: 2009-1-16 09:34
标题: 回复 3# 的帖子
楼上这位,首先说声谢谢!此方法我已经用过,得到的颜色是透明色,是Css中没有被粉红色覆盖前的颜色。
作者: asoqa    时间: 2009-1-16 10:06
有试过其他color属性吗?或者看看css中background是不是一张图片?
能贴下你的CSS样式代码和JS代码吗

[ 本帖最后由 asoqa 于 2009-1-16 10:13 编辑 ]
作者: gaoy_b    时间: 2009-1-16 13:51
标题: 回复 5# 的帖子
回楼上的话:在Css中不是一张图片。“其他color属性”我没有找到,用 object Spy查看 测试对象属性根本没有有关颜色的属性,查看 运行时对象属性,它的 currentStyle和Style是object

CSS样式代码:“继承自XXX”“里的颜色和式样都被覆盖了,你不用考虑。
1)在颜色变化前,
element.style {
width:498px;
}
.tbFieldWrap .textfield, .tbFieldWrap textarea {widget.css (行 272)
background-color:transparent;
border:0 none;
padding:1px 0 2px;
}
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div.tbFieldWrap
.isNotValid {widget.css (行 306)
color:#BD0922;
}
.tbFieldWrap {widget.css (行 270)
white-space:nowrap;
}
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div#ele_directoryVO.c_name.tbFormElement
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div.tbFieldsetContent
.panelStyle .panelStyleContent {widget.css (行 332)
border-style:none solid solid;
}
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div.tbFieldset
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div.left
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自form#10.tbLayoutNode directory....dDirectory
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div.tbPanelBody
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div#tbPage.tbLayoutNode
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自div#tbApplication.tbApplicationPanel
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自body.frame
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}
继承自html
* {widget.css (行 1)
color:#444444;
font-family:verdana,sans-serif;
font-size:12px;
}

2)颜色变化后
.isNotValid {background-color:#ffd0ce;color:#bd0922;}
这个值就是我想要的:ffd0ce
作者: gaoy_b    时间: 2009-1-16 14:40
标题: 回复 5# 的帖子
下面是有用的一段JS代码
// private method attachErrorTip
com.XXX.XXX._attachErrorTip = function(ele, msg) {
        neui.errorTips.detach(ele);
        ele.store('tip:text', msg);
        neui.errorTips.attach(ele);
        if (ele.getParent().hasClass('tbFieldWrap')) {
                ele.getParent().addClass('isNotValid');
        } else {
                ele.addClass('isNotValid');
        }
}

这个class isNotValid里的代码是:isNotValid {background-color:#ffd0ce;color:#bd0922;}

此文本框变红的一段Html代码
<input id="directoryVO.c_name" class="textfield" type="text" style="width: 498px;" validation="{maxLength:255,specialWord:'all'}" required="true" value="" name="directoryVO.c_name"/>
</div>在这里validation="{maxLength:255,specialWord:'all'}" required="true"两句是调用CSS在什么情况下改变颜色

[ 本帖最后由 gaoy_b 于 2009-1-16 14:42 编辑 ]
作者: sstars    时间: 2009-1-16 18:11
我试了一下Object.currentStyle.backgroundColor是可以的。你检查一下backgroundColor的大小写对不。
另外你用Object Spy是没有用的,currentStyle的属性是dom object的属性。你可以装个ie developer检查一下object的属性。

[ 本帖最后由 sstars 于 2009-1-16 18:13 编辑 ]
作者: asoqa    时间: 2009-1-16 18:18
style的属性可以参考这个网址:
http://www.w3school.com.cn/htmldom/dom_obj_style.asp
作者: gaoy_b    时间: 2009-1-19 10:04
标题: 回复 8# 的帖子
首先谢谢楼上两位,我又试了一下,特别注意了大小写。打印出的颜色还是“transparent”是没有变色之前的颜色。我现把录制的脚本以及加入的测试颜色代码贴上,麻烦两位给看看!
Browser("SkillB 4.0 ").Page("Skill 4.0 ").WebEdit("userName").Set "lms_admin"
Browser("Skill 4.0 ").Page("Skill 4.0 ").WebEdit("password").SetSecure "4973d8a8771f98e494be4ec47b4a839e07840ac0f80f5e7a"
Browser("Skill 4.0 ").Page("Skill 4.0 -").WebButton("WebButton").Click
Browser("Skill 4.0 ").Page("Skill 4.0 _2").Link("学习评价").Click
Browser("Skill 4.0 ").Page("Skill 4.0 _3").WebElement("WebTable").Click
Browser("Skill 4.0 ").Page("Skill 4.0_4").Frame("attribute").Link("新建").Click

Browser("Skill 4.0 ").Page("Skil 4.0 _4").Frame("attribute_2").WebElement("保存").Click
Browser("Skill 4.0 ").Page("Skill 4.0 _4").Frame("attribute_2").WebButton("WebButton").Click
Browser("Skill 4.0 ").Page("Skill 4.0 _4").Frame("attribute_2").WebEdit("directoryVO.c_serialnum").Set ""

Set a=Browser("Skill 4.0 ").Page("Skill 4.0 _4").Frame("attribute_2").WebEdit("directoryVO.c_serialnum").Object
      b=a.currentStyle.backgroundColor
           msgbox(b)

[ 本帖最后由 gaoy_b 于 2009-1-19 10:17 编辑 ]
作者: gaoy_b    时间: 2009-1-19 17:38
标题: 高手们,别忘了看看阿!
高手们,别忘了看看阿!
作者: asoqa    时间: 2009-1-20 10:24
实在抱歉,限于水平有限,我无法从你给的代码推导出实际产品的代码。我自己写了一个简易的版本,根据这个版本我使用了currentStyle.backgroundColor打印的是代码#ffd0ce,没有问题。供你参考。
html代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   
  2.                     "http://www.w3.org/TR/html4/loose.dtd">  
  3. <html>  
  4. <head>  
  5.   <script src="http://code.jquery.com/jquery-latest.js"></script>  
  6.         <link rel="stylesheet" type="text/css" href="a.css" />     
  7.   <script>         
  8.   $(document).ready(function(){   
  9.     $(aaa).addClass("isNotValid");   
  10.   });   
  11.   </script>
  12. </head>  
  13. <body>  
  14.   <p>Hello</p>  
  15.   <p>and</p>  
  16. <p><INPUT id="aaa" name="subject" value="" class="textfield"/></p>
  17. </body>  
  18. </html>  
复制代码
css样式代码
  1. element.style {
  2. width:498px;
  3. }
  4. .textfield {
  5. background-color:transparent;
  6. border:0 none;
  7. padding:1px 0 2px;
  8. font-color:#00ff00;
  9. }

  10. .tbFieldWrap .tbFieldWrap textarea {
  11. background-color:#ff0000;
  12. border:0 none;
  13. padding:1px 0 2px;
  14. }


  15. .isNotValid {
  16. color:#BD0922;
  17. }
  18. .tbFieldWrap {
  19. white-space:nowrap;
  20. }

  21. .isNotValid {background-color:#ffd0ce;color:#bd0922;font-color:#00ff00}
复制代码

作者: gaoy_b    时间: 2009-1-20 11:16
标题: 回复 12# 的帖子
一直在等你的回复那,谢谢你!我也真是郁闷了,我这是怎样得出的都是“transparent”,你写的HTML类似于我上面给的JS代码,它是在JS交互中变色的。
实际项目中的一段HTML代码:
<div class="tbFieldsetContent panelStyleContent" style="">
<div class="tbClearFloat"> </div>
<div id="ele_directoryVO.c_serialnum" class="tbFormElement leftPosition" style="width: 100%;">
<label class="tbLabel" style="width: 100px;">
节点编号
<span class="labelIndent"> </span>
</label>
<div class="tbFieldWrap tbFieldWrapBorder requiredElement isNotValid" style="width: 498px;">
<input id="directoryVO.c_serialnum" class="textfield" type="text" style="width: 498px;" validation="{maxLength:255}" required="true" value="" name="directoryVO.c_serialnum"/>
</div>
</div>

[ 本帖最后由 gaoy_b 于 2009-1-20 11:26 编辑 ]
作者: gaoy_b    时间: 2009-1-20 11:20
标题: 回复 9# 的帖子
我在以上几个帖子中给出了所有有用的HTml代码,JS代码和Css代码,麻烦你再看看,我得出的总是CSS中.tbFieldWrap .textfield, .tbFieldWrap textarea {widget.css (行 272)
background-color:transparent;
border:0 none;
padding:1px 0 2px;
}
的背景颜色“transparent”
作者: asoqa    时间: 2009-1-20 11:37
标题: 回复 13# 的帖子
这下知道原因了,上面的这段html代码非常明确。
可以看出颜色改变其实是div层的事,input也就是QTP的WebEdit颜色并没有变。div对应的QTP对象是WebElement,因此你应该抓取Div的对象,并用currentStyle.backgroundColor获取背景颜色。
下面是我的一段范例代码:
Set oDesc = Description.Create()
oDesc("class").Value = "tbFieldWrap tbFieldWrapBorder requiredElement isNotValid"
msgbox Browser("Browser").Page("Page").WebElement(oDesc).Object.currentStyle.backgroundColor
作者: gaoy_b    时间: 2009-1-20 13:58
标题: 回复 15# 的帖子
我抓了DIV的对象(用insert-〉Step Generator抓取的)
代码如下:
Set oDesc = Description.Create()
oDesc("class").Value = "tbFieldWrap tbFieldWrapBorder requiredElement isNotValid"
msgbox Browser("SkillBase 4.0 - XX_2").Page("SkillBase 4.0 - XX_2").WebElement(oDesc).Object.currentStyle.backgroundColor
出现Run Error 说的是在我的应用中WebElement object描述匹配多个哦bject这样的展示,为了唯一确定这个对象应该对这个对象附加一个属性,我还没有用过描述性编程,我应该怎样附加一个属性阿?
作者: asoqa    时间: 2009-1-20 14:40
例如如果你的div有id属性,可以用html id去匹配,其他的属性参考WebElement的帮助文档。
Set oDesc = Description.Create()
oDesc("class").Value = "tbFieldWrap tbFieldWrapBorder requiredElement isNotValid"
oDesc("html id").Value = "xxx"
msgbox Browser("SkillBase 4.0 - XX_2").Page("SkillBase 4.0 - XX_2").WebElement(oDesc).Object.currentStyle.backgroundColor

如果不用描述性编程,请确保抓取的对象是紧贴input的那个div,不要抓错了。
作者: gaoy_b    时间: 2009-1-20 14:58
标题: 回复 17# 的帖子
你说的那个DIV对象是不是下面的这个DIV,我问了开发人员,这个DIV没有html id。
<div class="tbFieldWrap tbFieldWrapBorder requiredElement isNotValid" style="width: 498px;">
<input id="directoryVO.c_serialnum" class="textfield" type="text" style="width: 498px;" validation="{maxLength:255}" required="true" value="" name="directoryVO.c_serialnum"/>
</div>
说是这个INPUT输入框和这个DIV是一一对应的,
我又再上面的我给你的代码上加了input里的id
Set oDesc = Description.Create()
oDesc("class").Value = "tbFieldWrap tbFieldWrapBorder requiredElement isNotValid"
oDesc("id").Value="directoryVO.c_serialnum"
oDesc("name").Value="directoryVO.c_serialnum"
a=Browser("SkillBase 4.0 - XX_2").Page("SkillBase 4.0 - XX_2").Frame("attribute").WebElement(oDesc).Object.currentStyle.backgroundColor
msgbox a
可惜运行时出错Cannot identify the object "[ WebElement ]" (of class WebElement). Verify that this object's properties match an object currently displayed in your application.
作者: gaoy_b    时间: 2009-1-20 15:05
标题: 回复 17# 的帖子
哈哈,我虽然用描述性编成没有成功,但我用DIV对象抓取成功了!!!
非常感谢你的支持和讲解,让我也从中学到了不少知识,再次感谢你!
作者: asoqa    时间: 2009-1-20 15:47
标题: 回复 18# 的帖子
呵呵,不用谢!
你用WebEdit的id和name去描述WebElement对象,肯定找不到了。而且oDesc("id").Value不应该用id,而是html id,也就是oDesc("html id").Value
描述性编程还是要了解一下的,很多对象QTP抓不下来的。

[ 本帖最后由 asoqa 于 2009-1-20 15:58 编辑 ]
作者: gaoy_b    时间: 2009-1-20 15:58
标题: 回复 8# 的帖子
嗯,听你的经验之谈没错,我接下来会试着练习用一下描述性编程,你能把你的MSN告诉我吗?我的duomeng04@hotmail.com

[ 本帖最后由 gaoy_b 于 2009-1-20 17:34 编辑 ]
作者: asoqa    时间: 2009-1-20 16:31
sanduoren@hotmail.com

推荐下面这个工具弥补object spy的不足,windows的应用就用spy++吧。
http://www.microsoft.com/downloa ... 1038&displaylang=en

抓到对象,想怎么干就怎么干

[ 本帖最后由 asoqa 于 2009-1-20 16:46 编辑 ]




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