QTP日期控件识别与参数化

发表于:2009-6-09 11:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:许奔    来源:cnblogs

  好了,说说今天解决的一个很麻烦的问题——日期控件识别并参数化!~

  今天突然想把日期控件参数化,结果发现日期控件取时间是这样的Browser("xxx").Page("xxx").Frame("Frame").WebElement("WebTable").Click

  一开始思维很简单,取出每个日期的相对坐标,然后将相对坐标参数化。

  为此,我特意用Object Spy看了一下这个控件上日期的相对坐标(横坐标依次是:336,359,390,415,444,470,488)(纵坐标依次是:360,380,400,420,440),如此,通过横纵坐标就可以取到任意一个日期;

  但还没等实现我就发现这个问题,这样的方式就算实现也很不直观,严重影响阅读效果;

  于是到网上查了一下,有个帅哥说道,可以在Tools->Options->Web标签->Advanced->Record setting里将除了Record coodinates外的全都勾选上,然后在Tools->Web Event Recording Configuration->Custom Setting里将onmouseover和onmousedown改为Enable(我没找到onmousedown)即可;

  我改了,发现识别出来多了这样两句:

Browser("Browser").Page("Document Form_2").Sync

Browser("Browser").Navigate "http://10.0.0.60/COG/calendar/My97DatePicker.htm"

  到网上查了一下,Sync是等到页面加载完毕进行下一步操作,而Navigate是导航到特定的你所想的web页或者文件,不过是为了打开这个日期控件,不过意外学到一些知识:

  部分Browser方法,如Navigate、Back、Home、Refresh等在某些人的机器上是好用的,但在另外一些人的机器上就不好用了。脚本执行到这些方法,并不会抛出错误;而且qtp日志里看到的状态是"done"。

  经过一段时间的观察,终于发现这些机器上IE加载项(IE"工具"->"管理加载项")的不同:

  BHOManager Class插件的问题。文件名是BHOManager.dll,部分人的机器上该插件被禁用或删除掉了,猜测原因可能是使用了某些清理ie的工具导致。

  解决该问题的方法很简单:

  如果是被禁用了,只要重新启用即可;如果是被删除掉了,可以重新安装qtp,或者从别处拷贝BHOManager.dll文件过来,用regsvr32 BHOManager.dll注册后就可以了。

  学新知识归新知识,问题还是要解决的,网上另一个帅哥说,可以用:Browser("xxx").Page("xxx").WebEdit("start_date").Object.value=DataTable("start_date", dtLocalSheet)的方法;

  于是修改了一下自己的脚本,并自作主张地将DataTable改为了WebTable(因为我觉得我这边识别出来是WebTable,却没注意DataTable代表的是参数化后取值的表格);

  运行,当然不行,发现问题,将WebTable改回了DataTable。

  运行,还是不行,发现start_date有问题(我这里又没有start_date这个参数名),于是在DataTable表格里双击新列列头,增加新列,列名为start_date。

  运行,还是不行,说Object Repository里没有start_date(还没存日期显示框控件呢),于是在Object Repository里增加日期显示框控件,并通过Object Spy看了一下显示框,标记为"ctl00$ContentPlaceHolder1$DMain1$CPDIssueData$txtShowDate",于是将该语句改为

Browser("xxx").Page("xxx").WebEdit("ctl00$ContentPlaceHolder1$DMain1$CPDIssueData$txtShowDate").Object.value=DataTable("start_date", dtLocalSheet)

  运行,还是不行,还说Object Repository里没有"ctl00$ContentPlaceHolder1$DMain1$CPDIssueData$txtShowDate",进去一看,没错啊,又存了一次,发现问题,我应该在根目录下存取该控件,避免上层控件冲突;

  运行,还是不行,还说Object Repository里没有"ctl00$ContentPlaceHolder1$DMain1$CPDIssueData$txtShowDate",再进去看,原来 Object Repository给"ctl00$ContentPlaceHolder1$DMain1$CPDIssueData$txtShowDate"了一个简称"ctl00$ContentPlaceHolder1$DMai",所以不要盲目用Object Spy给的名字,一切以Object Repository存的名称为准,将语句修改为:

Browser("xxx").Page("xxx").WebEdit("ctl00$ContentPlaceHolder1$DMai").Object.value=DataTable("start_date",dtLocalSheet)

  运行,成功了.................................

  毕竟还是很开心的,毕竟每一步都在向成功的方向逼近,有安排有步骤地顺着白痴电脑的思路走,总有办法让白痴电脑顺着你的思路走的,哈哈!~

  继续努力!~加油!~

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • 丸颜阿鼓朵
    2015-10-16 15:06:24

    说到底,你解决的方法还是第一种呀。
    Browser("xxxxxx").Page("xxxxxx").WebEdit("xxxx").Object.Value=DataTable("StarDate" ,dtLocalSheet)
    还是用的
    只是一开始做对象库的时候做的不全导致的吧~
    一定不要在有解决方案的问题上钻牛角尖O(∩_∩)O哈哈~

  • qingyudiandian
    2012-12-12 16:56:38

    楼主的经历很坎坷啊···

  • pengdan909
    2012-9-25 11:26:16

    不错,解决了我的问题  感谢

  • lansemogu1985
    2009-8-03 15:12:39

    dtLocalSheet是什么意思?我用这个QTP运行出错,说找不到start_date,后来我用了dtglobalsheet,就可以了。

  • sky_zhouw
    2009-6-18 10:52:09

    为什么不用WebEdit("XXX").Set 而用WebEdit("XXX").object.value呢?
    如果用了WebEdit("XXX")了,那么时间日期控件不是等于没用了嘛??

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号