如何使用QTP为.NET应用的月历控件设置随机日期?
如何用QTP在.NET应用的Month Calendar控件中设置随机日期
我之前处理过不少这类.NET日历控件的自动化问题,这种没有输入框的WindowsForms10.SysMonthCal32确实没法直接输日期,得靠控件本身的方法或者模拟用户操作来搞定,下面给你两种可行的方案,按需选就行:
方案一:用控件内置的SetDate方法(优先尝试)
大部分SysMonthCal32控件都支持直接设置日期的方法,这是最稳定的方式:
- 先定位到日历对象:
用QTP的Object Spy确认窗口和控件的识别属性,比如你的主窗口标题是"OrderSystem",那可以这么写:Set objCalendar = Window("OrderSystem").WinObject("Class Name:=WindowsForms10.SysMonthCal32") - 生成指定范围内的随机日期:
比如要生成过去一年到未来一年之间的随机日期,先初始化随机数,再计算范围:Randomize ' 初始化随机数生成器,避免重复序列 dtStart = DateAdd("d", -365, Date) ' 起始日期:一年前 dtEnd = DateAdd("d", 365, Date) ' 结束日期:一年后 intRandomOffset = Int((dtEnd - dtStart + 1) * Rnd) dtRandomDate = DateAdd("d", intRandomOffset, dtStart) - 调用SetDate设置日期:
直接把生成的日期传给控件的SetDate方法就行:objCalendar.SetDate dtRandomDate小提示:如果QTP的对象方法里看不到SetDate,试试开启UIAutomation支持,或者确认控件是否被正确识别为WinObject/SwfObject。
方案二:模拟手动点击(当内置方法失效时)
如果控件不支持SetDate,那就只能模拟用户点击的流程:
- 同样先定位控件并生成随机日期
- 切换到目标年份和月份:
先点击日历的标题区(显示年月的地方)切换到年份选择视图,选中年份后再切回月份选择:' 点击标题区域切换到年份视图(坐标根据你的控件调整,一般是左上角区域) objCalendar.Click 15, 10 ' 点击目标年份 objCalendar.Click CStr(Year(dtRandomDate)) ' 点击目标月份的名称 objCalendar.Click MonthName(Month(dtRandomDate)) - 点击目标日期:
直接点击日期数字即可,如果坐标不稳定,也可以通过控件的子元素定位:objCalendar.Click CStr(Day(dtRandomDate))注意:不同版本的控件布局可能不同,你可能需要微调点击的坐标,或者用Object Spy查看日期元素的属性来精准定位。
一些额外注意事项
- 一定要加
Randomize,不然每次运行脚本生成的随机日期都是一样的 - 如果日历嵌套在.NET应用的容器里,可能需要用
SwfWindow和SwfObject来识别,而不是WinObject,用Object Spy确认一下控件类型 - 测试时可以先输出生成的随机日期,方便调试:
MsgBox "生成的随机日期:" & dtRandomDate
内容的提问来源于stack exchange,提问作者koder
相关产品推荐
相关产品推荐

