"Внутри" тестов "по русски" лежит "ХАРДКОРНЫЙ" программистский код (на любом доступном "скриптовом" языке. Пусть даже на том же 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
...
Комментариев нет:
Отправить комментарий