您的位置:首页 > 编程语言 > Qt开发

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)

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

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

继续努力!~加油!~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: