"Внутри" тестов "по русски" лежит "ХАРДКОРНЫЙ" программистский код (на любом доступном "скриптовом" языке. Пусть даже на том же Python).
У нас это выглядит так:
Но! ОЧЕНЬ быстро этот "ХАРДКОРНЫЙ" код начинает скрываться за "фасадом" из "русских" названий:
У нас это выглядит так:
: " и проверить наличие диалога с кнопкой" IN aProc INTEGER IN aButton aButton CASE mbOk wait:Ok mbYes wait:Yes mbNo wait:No DEFAULT ( 'Неизвестная кнопка диалога' RAISE ) ENDCASE TRY aProc DO FINALLY TRY waited:? 'Не дождались диалога' ASSERTS // - убеждаемся, что диалог про конец поиска таки был EXCEPT "Сравнить текущее исключение с эталоном" DROP // - удаляем результат waited:? со стека, т.к. прилетела ересь 'Нарушен баланс скобок Wait' RAISE END END ; ... : "Встать на последнюю консультацию" OnTest cc:End контрол::FoldersTree:push pop:control:Caption 'Неподтвержденные' SameStr 'Не попали на папку неподтверждённых консультаций' ASSERTS cc:Up контрол::FoldersTree:push pop:control:Caption 'Ответы' SameStr IF cc:TreeExpand // - обрабатываем ситуацию, когда папка Отвеченные оказывается закрытой // всё остальное шаманство с OnTest похоже не нужно, но пусть пока будет ELSE контрол::FoldersTree:push pop:control:Caption 'Неподтвержденные' SameStr IF cc:Up контрол::FoldersTree:push pop:control:Caption 'Ответы' SameStr 'Не встали на папку Ответы' ASSERTS cc:TreeExpand ELSE //false контрол::FoldersTree:push pop:control:Caption ASSERTS ENDIF ENDIF cc:End cc:Up // Перейти к импортированной консультации ; : "Удалить последнюю консультацию" "Перевести фокус в консультации" OnTest "Встать на последнюю консультацию" wait:Yes TRY //cc:Del // - данная команда OVC на этом дереве не работает поэтому посылаем кнопку // но по-хорошему вообще надо вызывать операцию сущности "Нажать Del" // - удаляем один элемент списка FINALLY waited:? 'Не было диалога подтверждения удаления консультации' ASSERTS // - убеждаемся, что диалог удаления таки был END ; ... : "Импортировать консультацию, проверить наличие баллона и текст консультации" : Действия : Действия : TryHarder : TryHarder1 3 LOOP OnTest "Перевести фокус в консультации" ; // TryHarder 2 LOOP TryHarder1 3 LOOP OnTest ; // TryHarder TryHarder "Нажать на медаль {("Синяя медаль о наличии консультаций")} и проверить наличие баллона" TryHarder "Встать на последнюю консультацию" // Перейти к импортированной консультации "Нажать {('Enter')}" // Открыть выбранную консультацию "Сравнить текст с эталоном" ; "Выполнить {(@ Действия)} с импортированой консультацией" ; "Выполнить {(@ Действия)} со вкладкой консультаций" ; ... : "Сравнить список с эталоном" OBJECT IN aList aList ЯВЛЯЕТСЯ class::TvtLister IF aList pop:control:Caption . ELSE INTEGER VAR Count INTEGER VAR Item 0 >>> Item aList tree:GetItemsCount =: Count Item Count FOR Item aList tree:GetItem Node:Text "Заменить непечатаемые символы" . ++! Item NEXT ENDIF ; // "Сравнить список с эталоном" ... BOOLEAN FUNCTION "Расширенно найти ссылку в дереве" BOOLEAN IN aProc STRING IN aContext STRING IN aControl false =: Result STRING VAR l_Name focused:control:push pop:component:Name =: l_Name l_Name РАВНО aControl [[ 'Почему то в фокусе ' l_Name ' а не ' aControl ]] strings:Cat ASSERTS : "Ищем ноду по контексту" IN aProc INTEGER VAR "Предельное количество" 500 >>> "Предельное количество" BOOLEAN VAR Сделано НЕТ >>> Сделано INTERFACE VAR l_Node VAR l_CompareOp контрол::tvConfs РАВНО aControl IF @ StartsStr =: l_CompareOp ELSE @ SameStr =: l_CompareOp ENDIF TRY ПОКА ( НЕ Сделано И ( "Предельное количество" >0 ) ) BEGIN --! "Предельное количество" aControl byname:control:push tree:CurrentNode >>> l_Node STRING VAR l_Text l_Node Node:Text =: l_Text aContext l_Text l_CompareOp DO IF ДА >>> Сделано true =: Result ELSE // l_Node Node:IsLast IF // ДА >>> Сделано // ELSE // "Стрелка вниз" // ENDIF // Node:IsLast - не совсем нам подходит, она говорит в РОДИТЕЛЕ, а не во ВСЁМ ДЕРЕВЕ TRY aProc DO EXCEPT // - наверное добежали до конца дерева ДА >>> Сделано END ENDIF END FINALLY nil =: l_Node END ; // "Ищем ноду по контексту" @ "Стрелка вниз" "Ищем ноду по контексту" Result IF aProc ? ( "Нажать {('Enter')}" ) OnTest ELSE контрол::tvConfs РАВНО aControl IF // - Заплатка для борьбы с непереключением конфигураций @ "Стрелка вверх" "Ищем ноду по контексту" Result IF aProc ? ( "Нажать {('Enter')}" ) OnTest ENDIF // Result IF ENDIF // контрол::tvConfs РАВНО aControl IF ENDIF // Result IF ; // "Расширенно найти ссылку в дереве" : "Найти документ в списке" STRING IN aContext "Расширенно {(false)} найти ссылку {(aContext)} в дереве {(контрол::tvList)}" ; // "Найти документ в списке" : "Найти документ в списке и открыть его" STRING IN aContext "Расширенно {(false)} найти ссылку {(aContext)} в дереве {(контрол::tvList)}" IF "Нажать {('Enter')}" ELSE 'Документ в списке не найден!' . ENDIF ; // "Найти документ в списке" BOOLEAN FUNCTION "Перейти по ссылке в дереве" STRING IN aContext STRING IN aControl false =: Result "Расширенно {(true)} найти ссылку {(aContext)} в дереве {(aControl)}" IF true =: Result ENDIF ; // Перейти по ссылке в дереве" : "Переключиться на конфигурацию" STRING IN aContext "Открыть список конфигураций и перевести туда фокус" "Переместиться в начало дерева" "Перейти по ссылке {(aContext)} в дереве {(контрол::tvConfs)}" ! IF "Открыть список конфигураций и перевести туда фокус" "Переместиться в начало дерева" "Сравнить текущий список с эталоном" "Закрыть список конфигураций" false [[ 'Не удалось переключить конфигурацию на :' aContext ]] strings:Cat ASSERTS ELSE "Закрыть список конфигураций" // - т.к. конфигурация могла быть активной и Enter мог не срабоать ENDIF // "Перейти по ссылке {(aContext)} в дереве {(aControl)}" ! "Дождаться переключения вкладок" ; // "Переключиться на конфигурацию" : "Поработать с расширенной конфигурацией" IN aProc "Переключиться на конфигурацию {('Расширенная')}" TRY aProc DO FINALLY "Открыть список конфигураций и перевести туда фокус" // Это для того, чтобы фокус не потерять, а то он почему-то теряется "Переключиться на конфигурацию {('Основная')}" END // TRY..FINALLY ; // "Поработать с расширенной конфигурацией" : "Сделать в расширенной конфигурации" IN aProc aProc "Поработать с расширенной конфигурацией" ; // "Сделать в расширенной конфигурации" : "Вернуться к найденному" "Вернуться к найденному без проверки" "Сравнить абзац текущего редактора с эталоном" ; ... : "Проверка хинта для контрола" OBJECT IN aControl : Действия "Установить курсор мыши по координатам {( 5 5 )} относительно контрола {(aControl)}" "Дождаться переключения вкладок" 9 раз ( "Дать системе перерисоваться" 100 SLEEP ) "Узнать, виден ли хинт" IF 'Хинт:' . "Сравнить текст хинта с эталоном" ELSE 'Хинта нет.' . ENDIF ; // Действия "Запомнить позицию мыши и выполнить {(@ Действия)}" ; // "Проверка хинта для контрола" : "Сохраняем объект в папку Мои документы с именем " STRING IN aName : Действия "Ввести строку {(aName)}" OBJECT VAR "Форма сохранения в МД" OBJECT VAR "Кнопка ОК" "Контрол в фокусе" 2 раза "Получить родительскую форму" =: "Форма сохранения в МД" "Форма сохранения в МД" "Узнать, существует ли объект" ! 'Не нашли форму сохранения в МД' ASSERTS 'bt_enResult_opOk' "Форма сохранения в МД" "Найти контрол по имени на форме" =: "Кнопка ОК" "Кнопка ОК" "Кликнуть" ; // Действия 3 раза "Дождаться переключения вкладок" @ ( "Сохранить в Мои документы" ) MODAL ( Действия ) ; // "Сохраняем объект в папку Мои документы с именем " ...
Но! ОЧЕНЬ быстро этот "ХАРДКОРНЫЙ" код начинает скрываться за "фасадом" из "русских" названий:
: K100009879 ППР "Перевести фокус в поле 'Тип' в ППР" "Нажать {('Ctrl+Down')}" "Нажать {('Enter')}" "Выделить текст в поле" "Сравнить выделенный текст текущего редактора с эталоном" ; K100009879 ... : K103940127 INTEGER VAR l_Wnd "Найти окно с заголовком {('Совет дня')}" >>> l_Wnd ( l_Wnd "НЕ РАВНО" 0 ) ? ( l_Wnd "Закрыть окно по дескриптору из стека" ) ППР "Перевести фокус в поле 'Тип' в ППР" "Обработать Enter модально" ( 70 раз ( "Выбрать атрибут ИЛИ" "Стрелка вниз" ) "Нажать {('Enter')}" ) "Перевести фокус в поле 'Номер' в ППР" "Обработать Enter модально" ( 170 раз ( "Выбрать атрибут ИЛИ" "Стрелка вниз" ) "Нажать {('Enter')}" ) "Узнать максимальное положение вертикального скроллбара у текущего редактора" . ; K103940127 ... // Разработчик: Селянкин Владимир : K161121041 "Очистить журнал работы" "Открываем {(10003000)}" "Открываем {(2001)}" "Открываем {(2002)}" "Открываем {(2003)}" "Открываем {(2004)}" "Открываем {(2005)}" ОМ "Открываем {(10003000)}" ОМ "Сравнить список последних открытых документов с эталоном" ; K161121041 ... : K167353606 "Поиск лекарственного средства" "Ввести строку {('хел')}" "Нажать Искать" "Предварительный просмотр с эталонами" ; K167353606 ... : K183337891 "Открываем НК" 75 раз ( "Перейти на параграф вниз" ) "Дождаться переключения вкладок" СР "Вернуться в текст документа" "Выделить {(1)} параграфов" "Сравнить выделенный текст текущего редактора с эталоном" ; K183337891 ... // Разработчик: Селянкин Владимир : K200085315 : Действия "Открываем {(6086112)}" "Предварительный просмотр" "Нажать {('Esc')}" "Выполнить {(@ NOP)} с переключённой базой" ; ТБ24 "Выставить форме размеры {(1456 1000)} и {(@ Действия)}" ; K200085315 ... : K200085334 "Открываем {(2008)}" "Предварительный просмотр" "Дать системе перерисоваться" "Нажать {('Esc')}" "Выполнить {(@ "Проверить, что удалось перевести фокус в оглавление")} с переключённой базой" ; K200085334 ... : K216794957 ТБ24 ППР "Перевести фокус в поле 'Орган/Источник' в ППР" "в поле 'Орган/Источник' ввести {('Правительство России и СССР')}" "Выделить текст в поле" "Начинаем набирать {('Органы')}" "Сравнить абзац текущего редактора с эталоном" "Нажать {('Enter')}" "Сравнить абзац текущего редактора с эталоном" "Нажать Искать" "Проверить информацию о списке" ; K216794957 ... : K224135514 "Копировать в буфер строку {('01.01.2010')}" ППР "Перевести фокус в поле 'Дата принятия' в ППР" "Вставить" "Выделить текст в поле" "Сравнить выделенный текст текущего редактора с эталоном" ; K224135514 ... : K227478809 ППР "Установить фокус в поле 'Раздел/Тема' " "Выбрать в дереве атрибутов контекст {('Бухгалтерский учет, аудит, статистическая отчетность')}" "Нажать Искать" "Назад по истории" "Установить фокус в поле 'Раздел/Тема' " "Добавить ещё один атрибут" @ ( "Нажать {('Enter')}" ) MODAL ( "Стрелка вниз" "Нажать {('Enter')}" "Выбрать атрибут ИЛИ" ) "Нажать Искать" "Назад по истории" "Установить фокус в поле 'Раздел/Тема' " "Выделить текст в поле" "Сравнить выделенный текст текущего редактора с эталоном" "Стрелка вниз" "Выделить текст в поле" "Сравнить выделенный текст текущего редактора с эталоном" ; K227478809 ...
Комментариев нет:
Отправить комментарий