Есть ли способ принять запросы UAC с QTP?
Я создал автоматический тест, который должен запускать исполняемый файл (в данном случае скрипт удаления). Это приводит к тому, что Windows 7 отображает приглашение контроля учетных записей, которое необходимо принять перед продолжением теста QTP.
В нынешнем виде мне пришлось понизить UAC до уровня "не уменьшать яркость моего рабочего стола", чтобы даже добавить диалоговое окно в репозиторий объектов. Я попытался записать, нажав кнопку Да, но QTP не заметил моих действий, поэтому мне пришлось добавить объект вручную.
Даже тогда, когда я добавляю строку Dialog("User Account Control").WinButton("Yes").Click
, Я получил Unspecified Error
из QTP.
Редактировать: я также пытался использовать код ниже, чтобы нажать на произвольную точку на экране (где кнопка "Да" просто случайно).
Set dr = CreateObject("Mercury.DeviceReplay")
dr.MouseClick 1030, 550, LEFT_MOUSE_BUTTON
Хорошей новостью является то, что курсор попадает прямо на кнопку "Да", к сожалению, щелчок не работает.
Есть ли способ для QTP принять приглашение UAC, не отключая UAC вообще?
1 ответ
Я не знаю, что такое 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.
Бонус Чтение
Из Криса Джексона " Использование атрибута uiAccess для требуемого уровня выполнения для улучшения приложений, обеспечивающих удаленное управление рабочим столом":
Теперь большинство людей не совсем понимают, для чего это нужно, и манифест UAC, как правило, является просто делом копирования / вставки. Но разработчик удаленного рабочего стола обращает на это внимание. Для любого обычного программного обеспечения вы, как правило, хотите держаться подальше от него - это опасно и обходится без существенной функции безопасности (UIPI). Но если вы используете удаленный рабочий стол, это именно то, что вы хотите - вы должны видеть все!
На самом деле это достаточно опасно, что мы не позволим вам установить его без цифровой подписи вашего приложения. По умолчанию вы также должны установить его в безопасном месте (например, Program Files).