如何设置焦点在Vbscript中打开的文件对话框

时间:2010-09-14 11:31:52

标签: windows vbscript qtp

我们的团队正在自动化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

2 个答案:

答案 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或类似的东西。)

我不确定,但我认为这应该可以解决问题。