求助:有关文本框的颜色问题
求助:有关文本框的颜色问题问题:如图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怎样校验? 路过帮顶了呀 试试看
set oObj=Browser("SkillBase 4.0 -").Page("SkillBase 4.0 - ").Frame("attribute_2").WebEdit("directoryVO.c_serialnum").Object.style
msgbox oObj.backgroundColor
回复 3# 的帖子
楼上这位,首先说声谢谢!此方法我已经用过,得到的颜色是透明色,是Css中没有被粉红色覆盖前的颜色。 有试过其他color属性吗?或者看看css中background是不是一张图片?能贴下你的CSS样式代码和JS代码吗
[ 本帖最后由 asoqa 于 2009-1-16 10:13 编辑 ]
回复 5# 的帖子
回楼上的话:在Css中不是一张图片。“其他color属性”我没有找到,用 object Spy查看 测试对象属性根本没有有关颜色的属性,查看 运行时对象属性,它的 currentStyle和Style是objectCSS样式代码:“继承自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
回复 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 编辑 ] 我试了一下Object.currentStyle.backgroundColor是可以的。你检查一下backgroundColor的大小写对不。
另外你用Object Spy是没有用的,currentStyle的属性是dom object的属性。你可以装个ie developer检查一下object的属性。
[ 本帖最后由 sstars 于 2009-1-16 18:13 编辑 ] style的属性可以参考这个网址:
http://www.w3school.com.cn/htmldom/dom_obj_style.asp
回复 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 编辑 ]
高手们,别忘了看看阿!
高手们,别忘了看看阿! 实在抱歉,限于水平有限,我无法从你给的代码推导出实际产品的代码。我自己写了一个简易的版本,根据这个版本我使用了currentStyle.backgroundColor打印的是代码#ffd0ce,没有问题。供你参考。html代码<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="a.css" />
<script>
$(document).ready(function(){
$(aaa).addClass("isNotValid");
});
</script>
</head>
<body>
<p>Hello</p>
<p>and</p>
<p><INPUT id="aaa" name="subject" value="" class="textfield"/></p>
</body>
</html>css样式代码element.style {
width:498px;
}
.textfield {
background-color:transparent;
border:0 none;
padding:1px 0 2px;
font-color:#00ff00;
}
.tbFieldWrap .tbFieldWrap textarea {
background-color:#ff0000;
border:0 none;
padding:1px 0 2px;
}
.isNotValid {
color:#BD0922;
}
.tbFieldWrap {
white-space:nowrap;
}
.isNotValid {background-color:#ffd0ce;color:#bd0922;font-color:#00ff00}
回复 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 编辑 ]
回复 9# 的帖子
我在以上几个帖子中给出了所有有用的HTml代码,JS代码和Css代码,麻烦你再看看,我得出的总是CSS中.tbFieldWrap .textfield, .tbFieldWrap textarea {widget.css (行 272)background-color:transparent;
border:0 none;
padding:1px 0 2px;
}
的背景颜色“transparent”
回复 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
回复 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这样的展示,为了唯一确定这个对象应该对这个对象附加一个属性,我还没有用过描述性编程,我应该怎样附加一个属性阿? 例如如果你的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,不要抓错了。
回复 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.
回复 17# 的帖子
哈哈,我虽然用描述性编成没有成功,但我用DIV对象抓取成功了!!!非常感谢你的支持和讲解,让我也从中学到了不少知识,再次感谢你!
回复 18# 的帖子
呵呵,不用谢!你用WebEdit的id和name去描述WebElement对象,肯定找不到了。而且oDesc("id").Value不应该用id,而是html id,也就是oDesc("html id").Value
描述性编程还是要了解一下的,很多对象QTP抓不下来的。
[ 本帖最后由 asoqa 于 2009-1-20 15:58 编辑 ]
页:
[1]
2