我们的团队正在自动化QTP中的测试/测试数据准备,我们在VBScript中编写脚本。
在几个测试中,运行脚本的测试人员需要提供带有indata的MS-Excel文件。我们使用UserAccounts.CommonDialog
来做到这一点,效果很好。除了一个小问题,当我们从QTP 运行此文件时,文件对话框无法获得焦点。它在后台打开,运行脚本的测试人员很容易错过它并浪费时间等待对话。
我们如何重点关注文件对话框?
代码示例:
Set ObjFSO = CreateObject("UserAccounts.CommonDialog")
ObjFSO.Filter = "MS-Excel Spreadsheets|*.xls|All Files|*.*"
while ObjFSO.ShowOpen = false
msgbox "Script Error: Please select a file!"
wend
msgbox "You selected the file: " & ObjFSO.FileName
答案 0 :(得分:2)
您是否尝试在对话框上单击一下 - 以便QTP在继续操作之前点击它以设置焦点?
答案 1 :(得分:2)
我的猜测是,由于对话框是模态的,ShowOpen
方法在对话框关闭之前不会将执行控制返回给脚本。因此,作为测试脚本的一部分,无法与对话框进行交互。
作为一种解决方法,您可以生成一个并行脚本,该脚本将等待对话并激活它。但我想QTP不能并行运行两个脚本,所以你可能需要一个外部shell脚本(用VBScript / JScript / PowerShell /等编写)。
修改:请尝试以下操作:
使用以下内容创建外部VBScript文件(.vbs):
Set oShell = CreateObject("WScript.Shell")
While Not oShell.AppActivate("Open")
WScript.Sleep 500
Wend
此脚本调用WshShell.AppActivate
以激活标题包含Open
的窗口(将其替换为实际的对话框标题)。如果没有这样的widnow,它会在0.5秒后重试尝试(如果你愿意,你可以增加延迟)。
在打开对话框之前,从QTP测试中启动此脚本。 (使用SystemUtil.Run
或类似的东西。)
我不确定,但我认为这应该可以解决问题。