QTP日期控件识别与参数化(加强版)
2009-03-25 15:55
337 查看
先长舒一口恶气再说..................
好了,说说今天解决的一个很麻烦的问题——日期控件识别并参数化!~
今天突然想把日期控件参数化,结果发现日期控件取时间是这样的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)
运行,成功了.................................
毕竟还是很开心的,毕竟每一步都在向成功的方向逼近,有安排有步骤地顺着白痴电脑的思路走,总有办法让白痴电脑顺着你的思路走的,哈哈!~
继续努力!~加油!~
好了,说说今天解决的一个很麻烦的问题——日期控件识别并参数化!~
今天突然想把日期控件参数化,结果发现日期控件取时间是这样的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)
运行,成功了.................................
毕竟还是很开心的,毕竟每一步都在向成功的方向逼近,有安排有步骤地顺着白痴电脑的思路走,总有办法让白痴电脑顺着你的思路走的,哈哈!~
继续努力!~加油!~
相关文章推荐
- QTP学习笔记(一):安装篇,解决QTP无法识别控件对象的问题
- 对于自定义控件,能不能让QTP像识别标准控件一样去识别, 比如说:有没有办公将自定义控件添加为QTP所能识别的对象?
- 为什么QTP不能像对IE那样的识别FireFox 里的控件
- QTP日期控件
- 如何扩展QTP对于不可识别控件的处理能力
- 自动化测试工具QTP:维护对象库、获取对象属性、智能识别、参数化若干问题
- 编写QTP插件来识别Extjs控件
- qtp录制脚本过程中无法识别控件的解决方法
- Wdatepicker日期控件的使用指南
- My97DatePicker日期控件的使用
- Andorid时间控件和日期控件
- Wdatepicker日期控件的使用指南
- HTML5新控件 - 日期和时间选择输入
- 一个简单横向javascript日期控件
- 实现Calendar日期控件选中的日期赋值给TextBox控件
- Android中日期与时间设置控件的使用
- QTP中DataTable类型参数化步骤举例
- 自动识别页面上的所有控件是否被改变过
- GridView、Repeater等数据控件列数字、货币和日期的显示格式
- layDate1.0正式发布,您一直在寻找的的日期控件