51Testing软件测试论坛

标题: 求助QTP回放中WebList输入值的问题 [打印本页]

作者: crush    时间: 2011-8-3 18:32
标题: 求助QTP回放中WebList输入值的问题
本帖最后由 crush 于 2011-8-4 09:24 编辑

问题如下:

我的目的是想做一个制造数据的脚本 但是回放过程中有一个WebList不知道怎么写进去值 脚本与如下 请大神指点

Browser("Browsername").Page("Pagename").Frame("meizzCalendarIframe").WebList("tmpYearSelect").Select "2032年"

目前不知道怎么传截图 但是上述代码的Select是选不中值的 稍后上图
补充报错信息如下 求回复啊~~!![attach]74635[/attach]

[attach]74630[/attach][attach]74629[/attach]
[attach]74639[/attach]
作者: shingo0109    时间: 2011-8-4 09:51
看图片,年和月份应该是要先进行点击操作才会出现WebList的,所以LZ之前应该多一步WebElement的点击操作, 不然WebList是无法识别的
作者: crush    时间: 2011-8-4 09:57
回复 2# shingo0109

Browser("Browsername").Page("Pagename").Frame("meizzCalendarIframe").WebElement("WebTable").Click  
这个代码有的  但是也回放不了  因为选不中日期1-31号的那部分 那部分点了也录不出东西来~
作者: crush    时间: 2011-8-4 09:57
回复 2# shingo0109

Browser("Browsername").Page("Pagename").Frame("meizzCalendarIframe").WebElement("WebTable").Click  
这个代码有的  但是也回放不了  因为选不中日期1-31号的那部分 那部分点了也录不出东西来~
作者: shingo0109    时间: 2011-8-4 13:44
类似这种日期控件也写过,但都是直接用描述性编程写的,没有用录制,可能是不是有相同的控件,需要使用index来标识
作者: crush    时间: 2011-8-4 13:59
回复 5# shingo0109

不会描述性编程的说…… 能否提供当时的代码并解释下? 我照着写写
作者: luke.lv    时间: 2011-8-4 21:05
白天没搜到这贴。。。  看上面说的应该是对“**年”控件执行click的操作没有回放成功;  可以用描述性编程尝试下。  另外还可以用强制获取文本坐标的方法得到“年”的绝对坐标;然后执行click操作
作者: crush    时间: 2011-8-5 08:49
回复 7# luke.lv

不是不会描述性编程么~ 坐标的方法不行 这一个页面有3个这样的控件 需要下拉才能显示后两个 所以没法控制坐标
作者: shingo0109    时间: 2011-8-5 09:47
LZ要首先确保选择年份之前的点击操作要成功,这个应该是个webelement控件,用spy看下其属性,找到可以唯一识别它的属性,用描述性语言写下, 描述性参考如下:
Browser("xxxx").Page("xxxx").Frame("xxxx").WebElement("属性1:=aaa","属性2:=bbb").Click

如果有多个相同属性的话,可以添加index属性识别
作者: crush    时间: 2011-8-5 10:28
回复 9# shingo0109


click操作可以用Tab键来实现 现在的问题好像是 1-31号日期那部分 是录不出对象来的 识别不了 年份可以选择 但是选择不了日期 而且这个控件不能写入  好像是点击了日期之后 才会把年月日加起来生成一个值放入到里面 所以 选不了日期 就写不进去
作者: crush    时间: 2011-8-5 10:28
回复 9# shingo0109


click操作可以用Tab键来实现 现在的问题好像是 1-31号日期那部分 是录不出对象来的 识别不了 年份可以选择 但是选择不了日期 而且这个控件不能写入  好像是点击了日期之后 才会把年月日加起来生成一个值放入到里面 所以 选不了日期 就写不进去
作者: wolaizhinidexin    时间: 2011-8-5 11:33
改变输入框的只读属性为false,然后直接对输入框赋值。摒弃从日期控件中选值的方法。
作者: crush    时间: 2011-8-5 11:48
回复 12# wolaizhinidexin

怎么改?让开发改不太现实~  能否具体点?
作者: wyqkl    时间: 2011-8-5 16:53
重新录制一下脚本,当前年份虽然自动弹出了,可还是要用鼠标点一下的,或者你选择别的年份试一下
作者: crush    时间: 2011-8-5 17:07
回复 14# wyqkl


不是脚本的问题 录完了就这两行代码 只录上了年份的select 日期录不上
作者: wyqkl    时间: 2011-8-5 20:50
月份也要用鼠标点一下,月份和日期都改成其他的月份,不用用默认值,试一下。
作者: crush    时间: 2011-8-8 10:50
自己再顶一下~
作者: ddtianle    时间: 2011-8-8 13:54
本帖最后由 ddtianle 于 2011-8-8 13:55 编辑

12楼说的是正解
Browser("...").Page("...").WebEdit("...").Object.ReadOnly=False
Browser("...").Page("...").WebEdit("...").Set Date
作者: Gasgoo    时间: 2011-8-8 15:18
在选择  年份 前  加 wait()方法试试。让脚本停留几秒试试。
作者: datouniuniu    时间: 2011-8-8 15:24
这种控件用录制的方法是行不通的,肯定要用描述性语言来写。。。。
作者: lyscser    时间: 2011-8-8 17:03
如果不是要 测试这个空间本身的话就用:Browser("Browsername").Page("Pagename").Frame("meizzCalendarIframe").WebEdit("出生日期").Object.Value = "2032-01-01"就行了
如果要是特意测试这个控件,建议你手工测试,不要使用QTP,根本就不值得
作者: crush    时间: 2011-8-9 09:41
回复 21# lyscser

感谢楼上的几位  再次声明这不是webedit 不能用.object.value  
我也不是测试这个东西  我是录制制造数据的脚本 因为这个页面表单太多了 还需要参数化
作者: rogerliu0303    时间: 2011-8-13 14:57
这因该是个ActiveX吧
作者: rogerliu0303    时间: 2011-8-13 19:04
calendar需要点击webedit才会弹出来吧。而你的代码中并没有点击edit的操作。所有回放时,系统找不到calendar,就更找不到winlist。
其实最方便的方法是winedit.set,如果edit是只读的,可以用.object.readonly=false修改,然后写入值。
如果非要点击来获取日期,也可以,但是很麻烦。需要通过DOM获取很多页面属性,来控制控件。
下面是我写的携程网的calendar通过点击获取日期的部分代码,你可以参考一下。

  1. Function SplitStr(str)
  2. arr_tmp=split(str," ")
  3. arr=split(arr_tmp(1),"月")
  4. SplitStr=arr(0)
  5. End Function
  6. strTargetDate="2011-10-21"
  7. arrDate=split(strTargetDate,"-")
  8. strMonth=arrDate(1)
  9. strDay=arrDate(2)
  10. Set desc1=Description.Create
  11. Set desc2=Description.Create
  12. desc1("micclass").value="WebElement"
  13. desc1("html id").value="calendar_title1"
  14. desc1("html tag").value="SPAN"
  15. desc2("micclass").value="WebElement"
  16. desc2("html id").value="calendar_title2"
  17. desc2("html tag").value="SPAN"
  18. set titleCollection1=browser("携程旅行网: 酒店预订, 机票预订, 旅游度假,").Page("携程旅行网: 酒店预订, 机票预订, 旅游度假,").ChildObjects(desc1)
  19. set titleCollection2=browser("携程旅行网: 酒店预订, 机票预订, 旅游度假,").Page("携程旅行网: 酒店预订, 机票预订, 旅游度假,").ChildObjects(desc2)
  20. Set title1=titleCollection1(0)
  21. Set title2=titleCollection2(0)
  22. strTitle1=title1.GetROproperty("innertext")
  23. strTitle2=title2.GetROproperty("innertext")
  24. title_month1=SplitStr(strTitle1)
  25. title_month2=SplitStr(strTitle2)
  26. If cint(strMonth)<cint(title_month1) Then
  27. cnt=title_month1-strMonth
  28. For i=0 to cnt -1
  29.   browser("携程旅行网: 酒店预订, 机票预订, 旅游度假,").Page("携程旅行网: 酒店预订, 机票预订, 旅游度假,").WebEdit("DDatePeriod1").Click
  30.   browser("携程旅行网: 酒店预订, 机票预订, 旅游度假,").Page("携程旅行网: 酒店预订, 机票预订, 旅游度假,").WebElement("prevMonBtn").Click
  31. Next
  32. End If
  33. If cint(strMonth)>cint(title_month2) Then
  34. cnt=strMonth-title_month2
  35. For i=0 to cnt -1
  36.   browser("携程旅行网: 酒店预订, 机票预订, 旅游度假,").Page("携程旅行网: 酒店预订, 机票预订, 旅游度假,").WebEdit("DDatePeriod1").Click
  37.   browser("携程旅行网: 酒店预订, 机票预订, 旅游度假,").Page("携程旅行网: 酒店预订, 机票预订, 旅游度假,").WebElement("nextMonBtn").Click
  38. Next
  39. End If


复制代码

作者: harui    时间: 2011-8-15 09:25
北漂测试群:141528110
作者: samson_wsx    时间: 2011-8-15 12:01
用描述性语言来实现很简单,首先点击输入框,让它弹出日期控件,再对日期控件做描述性编程就搞定了.
作者: fjfhsn    时间: 2011-8-15 14:35
这问题我也遇到过,只能在点击之后,选择之前加个wait等几秒,否则回放时因为太快,导到没弹出日期选择框,就执行下一步,所以报错。
作者: vickywang_no1    时间: 2011-8-15 16:46
这种日期输入框,还是不要操作控件的好,直接针对那个日期输入框编写脚本。方法:
1)获取那个日期输入框对象(应该是一个WebEdit对象吧。如果录制时没有录制到该对象,可以在对象仓库中通过“添加”的方式手动获取)
2)一个步骤就可以解决:
XXX.WebEdit("XXX").Object.value="2011-07-09 10:08"
当然,那个日期值的格式要视具体情况而定,有的只需要输入日期值“2011-07-09”。
作者: Ganve_001    时间: 2011-8-15 17:19
实在不行,就用要输入的年份与当前日期的年份比较,差是多少,就循环点几下那个<< 或者>>,月份也一样。日期用WEBTABLE 点。
作者: binllyyu    时间: 2011-8-17 13:09
12楼的方法可以。我平常就是这么做的,不要按照年、月、日的去选,直接在日前编辑框 输入一个合法的日期。比喻  2011-8-17,  Browser("...").Page("...").WebEdit("...").Set “2011-8-17”




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