有没有办法接受QTP的UAC提示?

时间:2012-04-20 19:05:19

标签: vbscript automated-tests uac qtp gui-testing

我创建了一个需要运行可执行文件的自动化测试(在本例中为卸载脚本)。这会导致Windows 7显示需要在QTP测试继续之前接受的用户帐户控制提示。

就目前而言,我不得不将UAC降低到“不要忽略我的桌面”级别,以便甚至将对话框添加到对象存储库。我尝试录制单击是按钮,但QTP没有注意到我的操作,所以我不得不手动添加对象。

即便如此,当我添加第Dialog("User Account Control").WinButton("Yes").Click行时,我会从QTP收到Unspecified Error

修改 我也尝试使用下面的代码点击屏幕上的任意一个点(恰好是“是”按钮)。

Set dr = CreateObject("Mercury.DeviceReplay")
dr.MouseClick 1030, 550, LEFT_MOUSE_BUTTON

好消息是光标落在“是”按钮上,遗憾的是点击不起作用。

有没有办法让QTP接受UAC提示,而不是完全禁用UAC?

1 个答案:

答案 0 :(得分:3)

我不知道QTP是什么,但问题是它试图点击不允许的按钮。

Windows阻止应用程序以编程方式单击同意对话框。这样做是为了防止所谓的Shatter Attack。此外,如果允许代码查看并单击UAC同意对话框,恶意软件可以单击UAC提示本身。

有一种机制允许程序声明它们需要能够驱动用户界面;允许软件查看并单击UAC对话框。这是一个严重的安全风险,应用程序需要:

  • 进行数字签名
  • 从Program Files
  • 运行

声明您需要正确的

如果您要求QTP的开发人员更改其装配清单;打开**uiAccess=true**选项:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <!-- Disable Windows Vista UAC compatability heuristics -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="true"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly>

然后他们对QTP可执行文件进行数字签名,然后将其安装在 Program Files 中,然后就可以单击UAC对话框了。

奖金阅读

来自Chris Jackson的Using the uiAccess attribute of requestedExecutionLevel to Improve Applications Providing Remote Control of the Desktop

  

现在,大多数人并不真正理解这是为了什么,而UAC清单通常只是一个复制/粘贴事件。但是,远程桌面开发人员需要注意它,这是值得的。对于任何常规软件,您通常希望远离它 - 这很危险,并且避开重要的安全功能(UIPI)。但如果您正在远程操作桌面,那么它正是您想要的 - 您需要能够看到所有内容!

     

事实上,这很危险,我们不会允许您在没有对应用程序进行数字签名的情况下进行设置。默认情况下,您还必须将其安装在安全的位置(例如Program Files)。