gaoy_b 发表于 2009-1-15 17:13:47

求助:有关文本框的颜色问题

求助:有关文本框的颜色问题
问题:如图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:15

路过帮顶了呀

asoqa 发表于 2009-1-15 17:53:29

试试看
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:07

回复 3# 的帖子

楼上这位,首先说声谢谢!此方法我已经用过,得到的颜色是透明色,是Css中没有被粉红色覆盖前的颜色。

asoqa 发表于 2009-1-16 10:06:09

有试过其他color属性吗?或者看看css中background是不是一张图片?
能贴下你的CSS样式代码和JS代码吗

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

gaoy_b 发表于 2009-1-16 13:51:34

回复 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:55

回复 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:17

我试了一下Object.currentStyle.backgroundColor是可以的。你检查一下backgroundColor的大小写对不。
另外你用Object Spy是没有用的,currentStyle的属性是dom object的属性。你可以装个ie developer检查一下object的属性。

[ 本帖最后由 sstars 于 2009-1-16 18:13 编辑 ]

asoqa 发表于 2009-1-16 18:18:15

style的属性可以参考这个网址:
http://www.w3school.com.cn/htmldom/dom_obj_style.asp

gaoy_b 发表于 2009-1-19 10:04:29

回复 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:41

高手们,别忘了看看阿!

高手们,别忘了看看阿!

asoqa 发表于 2009-1-20 10:24:58

实在抱歉,限于水平有限,我无法从你给的代码推导出实际产品的代码。我自己写了一个简易的版本,根据这个版本我使用了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}

gaoy_b 发表于 2009-1-20 11:16:50

回复 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:19

回复 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:25

回复 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:22

回复 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:18

例如如果你的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:28

回复 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:43

回复 17# 的帖子

哈哈,我虽然用描述性编成没有成功,但我用DIV对象抓取成功了!!!
非常感谢你的支持和讲解,让我也从中学到了不少知识,再次感谢你!

asoqa 发表于 2009-1-20 15:47:25

回复 18# 的帖子

呵呵,不用谢!
你用WebEdit的id和name去描述WebElement对象,肯定找不到了。而且oDesc("id").Value不应该用id,而是html id,也就是oDesc("html id").Value
描述性编程还是要了解一下的,很多对象QTP抓不下来的。

[ 本帖最后由 asoqa 于 2009-1-20 15:58 编辑 ]
页: [1] 2
查看完整版本: 求助:有关文本框的颜色问题