我创建了一个需要运行可执行文件的自动化测试(在本例中为卸载脚本)。这会导致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?
答案 0 :(得分:3)
我不知道QTP是什么,但问题是它试图点击不允许的按钮。
Windows阻止应用程序以编程方式单击同意对话框。这样做是为了防止所谓的Shatter Attack。此外,如果允许代码查看并单击UAC同意对话框,恶意软件可以单击UAC提示本身。
有一种机制允许程序声明它们需要能够驱动用户界面;允许软件查看并单击UAC对话框。这是一个严重的安全风险,应用程序需要:
如果您要求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)。