Как установить фокус на диалоге файла, открытого в Vbscript - PullRequest
0 голосов
/ 14 сентября 2010

Наша команда автоматизирует тесты / подготовку тестовых данных в QTP, а мы выполняем сценарии в VBScript.

В нескольких тестах тестирующий, который запускает сценарий, должен предоставить индату файл 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 ]

2 голосов
/ 15 сентября 2010

Я предполагаю, что, поскольку диалог является модальным, метод ShowOpen не возвращает управление выполнением обратно в сценарий, пока диалоговое окно не будет закрыто. Поэтому нет возможности взаимодействовать с диалогом как частью вашего тестового сценария.

В качестве обходного пути вы можете запустить параллельный скрипт, который будет ждать диалога и активировать его. Но я предполагаю, что QTP не может запускать два сценария параллельно, поэтому вам, вероятно, понадобится сценарий внешней оболочки (написанный на VBScript / JScript / PowerShell / etc).


Редактировать: Попробуйте следующее:

  • Создайте внешний файл VBScript (.vbs) со следующим содержимым:

    Set oShell = CreateObject("WScript.Shell")
    While Not oShell.AppActivate("Open")
      WScript.Sleep 500
    Wend
    

    Этот скрипт вызывает WshShell.AppActivate, чтобы активировать окно, заголовок которого содержит Open (замените его фактическим заголовком диалога). Если такого вдова у монента нет, он повторяет попытку через 0,5 с (вы можете увеличить задержку, если хотите).

  • Запустите этот скрипт из вашего теста QTP перед открытием диалогового окна. (Используйте SystemUtil.Run или что-то вроде этого.)

Я не уверен, но я думаю, что это должно сработать.

2 голосов
/ 14 сентября 2010

Вы пытались записать щелчок в диалоговом окне - чтобы QTP щелкнул по нему, чтобы установить фокус, прежде чем продолжить?

...