Перед любым, кто использует HP QuickTest Professional, рано или поздно может встать проблема копирования содержимого большого текстового файла, например, содержащего приличный по объему XML-запрос, в какое-либо поле тестируемого приложения, опять же, например, в поле отправки запроса. Камнем преткновения оказывается или длительность процесса считывания и переноса содержимого файла в поле приложения, или невозможность использовать метод SendKeys ввиду того, что он слишком часто не срабатывает в тех случаях, когда автотест выполняется на системе, не отображаемой на вашем мониторе непосредственно в момент выполнения.
Я решил поделиться собственным успешным опытом решения этой, пусть и небольшой, но иногда необходимой для полноценного автоматизированного тестирования задачи.
1. Копирование содержимого файла в системный буфер обмена:
2. Вставка содержимого буфера в поле приложения:
Проблемы, которые могут возникнуть при используемом подходе:
— несоответствие кодировок
— несрабатывание команды из пункта 1 с первого раза
Проблему несоответствия кодировок я решил с помощью BAT-файла следующего содержания:
chcp номер_кодировки
(если в содержимом файла встречаются символы Кириллицы, подойдет 1251)
type %1 | clip
Команда копирования содержимого файла в буфер обмена, конечно, тоже видоизменится, теперь она запускает этот BAT-файл, передавая ему в качестве параметра %1 имя файла:
Проблему несрабатывания команды с первого раза я решил так же, в лоб, потому что в моем случае ввиду объемов копируемых файлов она с первого раза не срабатывает никогда. ОС, кстати: Windows Server 2008 R2
Ниже показано, как BAT-файл и весь кусок кода выглядят с определенными для примера параметрами:
BAT-файл (C:\CopyToCB.bat):
Кусок кода:
Я решил поделиться собственным успешным опытом решения этой, пусть и небольшой, но иногда необходимой для полноценного автоматизированного тестирования задачи.
1. Копирование содержимого файла в системный буфер обмена:
set ws = CreateObject("WScript.Shell")
ws.Run "cmd /c type [полное_имя_файла] | clip"
2. Вставка содержимого буфера в поле приложения:
'Нажатие клавиши V с зажатой клавишей Ctrl
Определение_поля_приложения_в_Object_Repository.PressKey "V", micCtrl
Проблемы, которые могут возникнуть при используемом подходе:
— несоответствие кодировок
— несрабатывание команды из пункта 1 с первого раза
Проблему несоответствия кодировок я решил с помощью BAT-файла следующего содержания:
chcp номер_кодировки
(если в содержимом файла встречаются символы Кириллицы, подойдет 1251)
type %1 | clip
Команда копирования содержимого файла в буфер обмена, конечно, тоже видоизменится, теперь она запускает этот BAT-файл, передавая ему в качестве параметра %1 имя файла:
ws.Run "[cmd /c полное_имя_BAT'ника] [полное_имя_копируемого_файла]"
Проблему несрабатывания команды с первого раза я решил так же, в лоб, потому что в моем случае ввиду объемов копируемых файлов она с первого раза не срабатывает никогда. ОС, кстати: Windows Server 2008 R2
For i = 1 to 2
ws.Run "cmd /c [полное_имя_BAT'ника] [полное_имя_копируемого_файла]"
Wait (2)
Next
Ниже показано, как BAT-файл и весь кусок кода выглядят с определенными для примера параметрами:
BAT-файл (C:\CopyToCB.bat):
chcp 1251
type %1 | clip
Кусок кода:
set ws = CreateObject("WScript.Shell")
For i = 1 to 2
ws.Run "cmd /c C:\CopyToCB.bat C:\test.txt"
Wait (2)
Next
JavaWindow("soapUI 4.5.0").JavaInternalFrame("Request 1").JavaEdit("Request").PressKey "V", micCtrl