diff --git "a/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 79b59544f..9b06ef55e 100644 --- "a/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/\320\242\320\265\321\201\321\202\320\232\320\273\320\270\320\265\320\275\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -50,7 +50,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПодключитьТестКлиент_ПакетныйРежим(Параметры_xddTestClient, ДопПараметры) Экспорт +Процедура ПодключитьТестКлиент_ПакетныйРежим(Параметры_xddTestClient, ДопПараметры = Неопределено) Экспорт Если ЗначениеЗаполнено(Параметры_xddTestClient) И ТипЗнч(Параметры_xddTestClient[0]) <> Тип("ФиксированныйМассив") Тогда @@ -265,6 +265,21 @@ КонецПроцедуры +&НаКлиенте +Функция ПоявилосьОкноПредупрежденияСТекстом(Знач ТестКлиент, Знач ТекстИсключенияДляПроверки) Экспорт + + ОкноПредупреждение = ОкноПредупреждение(ТестКлиент); + + Если ТипЗнч(ОкноПредупреждение) <> Тип("ТестируемоеОкноКлиентскогоПриложения") Тогда + Возврат Ложь; + КонецЕсли; + + ТекстИсключения = ТекстИсключения(ОкноПредупреждение); + + Возврат Найти(ВРег(ТекстИсключения), ВРег(ТекстИсключенияДляПроверки)) > 0; + +КонецФункции + &НаКлиенте Функция ОкноПредупреждение(ТестКлиент) @@ -283,8 +298,12 @@ КонецЕсли; Попытка - ТестируемаяФорма = ПодчиненныйОбъект.НайтиОбъект(Тип("ТестируемаяФорма")); - Если ТестируемаяФорма = Неопределено Тогда + Если ПодчиненныеОбъекты.ПолучитьПодчиненныеОбъекты().Количество() Тогда + ТестируемаяФорма = ПодчиненныйОбъект.НайтиОбъект(Тип("ТестируемаяФорма")); + Если ТестируемаяФорма = Неопределено Тогда + Продолжить; + КонецЕсли; + Иначе Продолжить; КонецЕсли; Исключение diff --git "a/plugins/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 2e8b585bf..480735173 100644 --- "a/plugins/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -2,6 +2,8 @@ Перем КонтекстЯдра; &НаКлиенте Перем СтатусыРезультатаТестирования; +&НаКлиенте +Перем ФлагОтрицанияДляСообщения; // { Plugin interface &НаКлиенте @@ -23,14 +25,17 @@ &НаКлиенте Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт - ВыполнитьМетодОбъектаНаСервере("Что", 2, ПроверяемоеЗначениеПараметр, Сообщение); + + Объект.ПроверяемоеЗначение = ПроверяемоеЗначениеПараметр; + Объект.ДопСообщениеОшибки = Сообщение; + Объект.ФлагОтрицания = Ложь; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция Не_() Экспорт - ВыполнитьМетодОбъектаНаСервере("Не_", 0); + Объект.ФлагОтрицания = Истина; Возврат ЭтаФорма; КонецФункции @@ -42,14 +47,18 @@ &НаКлиенте Функция Метод(Знач ИмяМетода, Знач ПараметрыМетода = Неопределено) Экспорт - ВыполнитьМетодОбъектаНаСервере("Метод", 2, ИмяМетода, ПараметрыМетода); + Объект.ИмяМетода = ИмяМетода; + Объект.ПараметрыМетода = ПараметрыМетода; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция ЭтоИстина() Экспорт - ВыполнитьМетодОбъектаНаСервере("ЭтоИстина", 0); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение = Истина) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Формат(Объект.ПроверяемоеЗначение, "БЛ=Ложь; БИ=Истина"), "является ИСТИНОЙ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -61,7 +70,10 @@ &НаКлиенте Функция ЭтоЛожь() Экспорт - ВыполнитьМетодОбъектаНаСервере("ЭтоЛожь", 0); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение = Ложь) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Формат(Объект.ПроверяемоеЗначение, "БЛ=Ложь; БИ=Истина"), "является ЛОЖЬЮ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -73,21 +85,30 @@ &НаКлиенте Функция Равно(Знач ОжидаемоеЗначение) Экспорт - ВыполнитьМетодОбъектаНаСервере("Равно", 1, ОжидаемоеЗначение); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение = ОжидаемоеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "РАВНО (" + ОжидаемоеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция Больше(Знач МеньшееЗначение) Экспорт - ВыполнитьМетодОбъектаНаСервере("Больше", 1, МеньшееЗначение); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение > МеньшееЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "БОЛЬШЕ (" + МеньшееЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция БольшеИлиРавно(Знач МеньшееИлиРавноеЗначение) Экспорт - ВыполнитьМетодОбъектаНаСервере("БольшеИлиРавно", 1, МеньшееИлиРавноеЗначение); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение >= МеньшееИлиРавноеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "БОЛЬШЕ ИЛИ РАВНО (" + МеньшееИлиРавноеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -99,7 +120,10 @@ &НаКлиенте Функция МеньшеИлиРавно(Знач БольшееИлиРавноеЗначение) Экспорт - ВыполнитьМетодОбъектаНаСервере("МеньшеИлиРавно", 1, БольшееИлиРавноеЗначение); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение <= БольшееИлиРавноеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "МЕНЬШЕ ИЛИ РАВНО (" + БольшееИлиРавноеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -111,28 +135,40 @@ &НаКлиенте Функция Меньше(Знач БольшееЗначение) Экспорт - ВыполнитьМетодОбъектаНаСервере("Меньше", 1, БольшееЗначение); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение < БольшееЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "МЕНЬШЕ (" + БольшееЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция Заполнено() Экспорт - ВыполнитьМетодОбъектаНаСервере("Заполнено", 0); + Если Не ЛогическоеВыражениеВерно(ЗначениеЗаполнено(Объект.ПроверяемоеЗначение)) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "является ЗАПОЛНЕННЫМ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция Существует() Экспорт - ВыполнитьМетодОбъектаНаСервере("Существует", 0); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение <> Неопределено И Объект.ПроверяемоеЗначение <> Null) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "СУЩЕСТВУЕТ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция ЭтоНеопределено() Экспорт - ВыполнитьМетодОбъектаНаСервере("ЭтоНеопределено", 0); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение = Неопределено) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "является НЕОПРЕДЕЛЕНО."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -144,7 +180,10 @@ &НаКлиенте Функция ЭтоNull() Экспорт - ВыполнитьМетодОбъектаНаСервере("ЭтоNull", 0); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение = Null) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "является NULL."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -156,20 +195,31 @@ &НаКлиенте Функция ИмеетТип(Знач ТипИлиИмяТипа) Экспорт - ВыполнитьМетодОбъектаНаСервере("ИмеетТип", 1, ТипИлиИмяТипа); + ОжидаемыйТип = ?(ТипЗнч(ТипИлиИмяТипа) = Тип("Строка"), Тип(ТипИлиИмяТипа), ТипИлиИмяТипа); + ТипПроверяемогоЗначения = ТипЗнч(Объект.ПроверяемоеЗначение); + Если Не ЛогическоеВыражениеВерно(ТипПроверяемогоЗначения = ОжидаемыйТип) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке("тип - " + ТипПроверяемогоЗначения, "имеет тип (" + ОжидаемыйТип + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция Между(Знач НачальноеЗначение, Знач КонечноеЗначение) Экспорт - ВыполнитьМетодОбъектаНаСервере("Между", 2, НачальноеЗначение, КонечноеЗначение); + Если Не ЛогическоеВыражениеВерно(Объект.ПроверяемоеЗначение >= НачальноеЗначение И Объект.ПроверяемоеЗначение <= КонечноеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Объект.ПроверяемоеЗначение, "МЕЖДУ (" + НачальноеЗначение + ") и (" + КонечноеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли;; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция Содержит(Знач ИскомоеЗначение) Экспорт + + Перем ИскомоеЗначениеНайдено; + ПроверяемоеЗначение = Объект.ПроверяемоеЗначение; ДопСообщениеОшибки = Объект.ДопСообщениеОшибки; ТипПроверяемоегоЗначения = ТипЗнч(Объект.ПроверяемоеЗначение); @@ -181,23 +231,87 @@ ИскомоеЗначениеНайдено = Истина; КонецЕсли; Возврат ЭтаФорма; + ИначеЕсли ТипПроверяемоегоЗначения = Тип("Массив") Или ТипПроверяемоегоЗначения = Тип("ФиксированныйМассив") Тогда + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ИскомоеЗначение) <> Неопределено; + ИначеЕсли ТипПроверяемоегоЗначения = Тип("Структура") Или ТипПроверяемоегоЗначения = Тип("ФиксированнаяСтруктура") + Или ТипПроверяемоегоЗначения = Тип("Соответствие") Или ТипПроверяемоегоЗначения = Тип("ФиксированноеСоответствие") Тогда + Для каждого КлючЗначение Из ПроверяемоеЗначение Цикл + ИскомоеЗначениеНайдено = КлючЗначение.Значение = ИскомоеЗначение; + Если ИскомоеЗначениеНайдено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ИначеЕсли ТипПроверяемоегоЗначения = Тип("СписокЗначений") Тогда + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ИскомоеЗначение) <> Неопределено; + КонецЕсли; + + Если ИскомоеЗначениеНайдено = Неопределено Тогда + СообщениеОшибки = "Утверждение ""Содержит"" не умеет работать с типом <" + ТипПроверяемоегоЗначения + ">." + ФорматДСО(ДопСообщениеОшибки); + ВызватьИсключение СообщениеОшибки; КонецЕсли; - ВыполнитьМетодОбъектаНаСервере("Содержит", 1, ИскомоеЗначение); + Если Не ЛогическоеВыражениеВерно(ИскомоеЗначениеНайдено) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "СОДЕРЖИТ (" + ИскомоеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция ИмеетДлину(Знач ОжидаемаяДлина) Экспорт - ВыполнитьМетодОбъектаНаСервере("ИмеетДлину", 1, ОжидаемаяДлина); + Перем ФактическаяДлина; + + ТипПроверяемоегоЗначения = ТипЗнч(Объект.ПроверяемоеЗначение); + Если ТипПроверяемоегоЗначения = Тип("Строка") Тогда + ФактическаяДлина = СтрДлина(Объект.ПроверяемоеЗначение); + ИначеЕсли ТипПроверяемоегоЗначения = Тип("Массив") Или ТипПроверяемоегоЗначения = Тип("ФиксированныйМассив") + Или ТипПроверяемоегоЗначения = Тип("Структура") Или ТипПроверяемоегоЗначения = Тип("ФиксированнаяСтруктура") + Или ТипПроверяемоегоЗначения = Тип("Соответствие") Или ТипПроверяемоегоЗначения = Тип("ФиксированноеСоответствие") + Или ТипПроверяемоегоЗначения = Тип("СписокЗначений") Тогда + ФактическаяДлина = Объект.ПроверяемоеЗначение.Количество(); + КонецЕсли; + + Если ФактическаяДлина = Неопределено Тогда + СообщениеОшибки = "Утверждение ""ИмеетДлину"" не умеет работать с типом <" + ТипПроверяемоегоЗначения + ">." + ФорматДСО(Объект.ДопСообщениеОшибки); + ВызватьИсключение СообщениеОшибки; + КонецЕсли; + + Если Не ЛогическоеВыражениеВерно(ФактическаяДлина = ОжидаемаяДлина) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке("<" + Объект.ПроверяемоеЗначение + "> с длиной " + ФактическаяДлина, "ИМЕЕТ ДЛИНУ (" + ОжидаемаяДлина + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции &НаКлиенте Функция ВыбрасываетИсключение(Знач ФрагментИсключения = "") Экспорт - ВыполнитьМетодОбъектаНаСервере("ВыбрасываетИсключение", 1, ФрагментИсключения); + Контекст = Объект.ПроверяемоеЗначение; + СтрокаПараметры = ""; + Если ТипЗнч(Объект.ПараметрыМетода) = Тип("Массив") Тогда + Для Сч = 0 По Объект.ПараметрыМетода.Количество() - 1 Цикл + СтрокаПараметры = СтрокаПараметры + ",ПараметрыМетода[" + Сч + "]"; + КонецЦикла; + СтрокаПараметры = Сред(СтрокаПараметры, 2); + КонецЕсли; + СтрокаДляВыполнения = "Контекст." + Объект.ИмяМетода + "(" + СтрокаПараметры + ")"; + + ИсключениеВозникло = Ложь; + Попытка + Выполнить(СтрокаДляВыполнения); + Исключение + ИсключениеВозникло = Истина; + ТекстИсключения = ОписаниеОшибки(); + КонецПопытки; + + Если Не ЛогическоеВыражениеВерно(ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0) Тогда + СообщениеОшибки = "Ожидали, что " + СтрокаДляВыполнения + + ?(Объект.ФлагОтрицания, " НЕ ", " ") + + "ВЫБРОСИТ ИСКЛЮЧЕНИЕ" + + ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", ""); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; Возврат ЭтаФорма; КонецФункции @@ -295,6 +409,19 @@ Возврат СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока); КонецФункции +&НаКлиенте +Функция ЛогическоеВыражениеВерно(Знач ЛогическоеВыражение) + Результат = Объект.ФлагОтрицания <> ЛогическоеВыражение; + ФлагОтрицанияДляСообщения = Объект.ФлагОтрицания; + ФлагОтрицания = Ложь; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция СформироватьСообщениеОбОшибке(Знач ПроверяемоеЗначение, Знач Ожидание) + Возврат "Ожидали, что проверяемое значение (" + ПроверяемоеЗначение + ")" + ?(ФлагОтрицанияДляСообщения, " НЕ ", " ") + Ожидание + ФорматДСО(Объект.ДопСообщениеОшибки); +КонецФункции // } Helpers СтатусыРезультатаТестирования = Новый Структура; diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index b83d66a8b..7004b90f2 100644 --- "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -421,51 +421,74 @@ &НаКлиенте Функция ВыполнитьШагПроверкиТаблицыФормы(ОкноСТаблицейФормы, ШагСценария, ТестКлиент) - ТаблицаФормы = ОкноСТаблицейФормы.НайтиОбъект(Тип("ТестируемаяТаблицаФормы")); - Если ТаблицаФормы = Неопределено Тогда - Возврат Ложь; + Результат = Ложь; + ТекстИсключенияДляГруппировки = НСтр("ru = 'Действие недоступно для строки группировки списка!'"); + + ТаблицыФормы = ОкноСТаблицейФормы.НайтиОбъекты(Тип("ТестируемаяТаблицаФормы")); + + Если ТаблицыФормы = Неопределено Тогда + Возврат Результат; КонецЕсли; - Попытка - Если Не ТаблицаФормы.ТекущаяДоступность() Или Не ТаблицаФормы.ТекущаяВидимость() Тогда - Возврат Ложь; + + Для Каждого ТаблицаФормы Из ТаблицыФормы Цикл + + ТаблицаФормы.Активизировать(); + + Если Не ТаблицаФормыДоступна(ТаблицаФормы) Тогда + Продолжить; КонецЕсли; - Исключение - //ОписаниеОшибки() - КонецПопытки; - ПерейтиКЗаданнойСтрокеТаблицыФормы(ШагСценария, ТаблицаФормы, ТестКлиент); + ПерейтиКЗаданнойСтрокеТаблицыФормы(ШагСценария, ТаблицаФормы, ТестКлиент); - Если Не ЗначениеЗаполнено(ТаблицаФормы.ПолучитьВыделенныеСтроки()) Тогда - Возврат Истина; - КонецЕсли; + Если Не ЗначениеЗаполнено(ТаблицаФормы.ПолучитьВыделенныеСтроки()) Тогда + Результат = Истина; + Иначе - ТаблицаФормы.Выбрать(); + РазвернутьВетвьДерева(ТаблицаФормы); - КонтекстЯдра.Плагин("ТестКлиенты").ИдентифицироватьОкноПредупреждение(ТестКлиент, ШагСценария, Ложь); + ТаблицаФормы.Выбрать(); - ТекущееОкно = ТестКлиент.ПолучитьАктивноеОкно(); - Если ПриКликеВТаблицеФормыНовоеОкноНеОткрылось(ТекущееОкно, ОкноСТаблицейФормы) Тогда - Если ТаблицаФормы.ТекущийРежимРедактирование() Тогда - ТаблицаФормы.ЗакончитьРедактированиеСтроки(); КонецЕсли; - Возврат Истина; - КонецЕсли; - ПроверитьМодифицированность(ШагСценария, ТекущееОкно, ТестКлиент, "При открытии"); + Пока ПлагинТестКлиенты.ПоявилосьОкноПредупрежденияСТекстом(ТестКлиент, ТекстИсключенияДляГруппировки) Цикл - НажатьКнопкуЗаписать(ШагСценария, ТекущееОкно, ТестКлиент); + ТекущееОкно = ТестКлиент.ПолучитьАктивноеОкно(); + ТекущееОкно.Закрыть(); - Если ТекущееОкно = ТестКлиент.ПолучитьАктивноеОкно() Тогда - ПроверитьМодифицированность(ШагСценария, ТекущееОкно, ТестКлиент, "После записи"); - КонецЕсли; + Если ТаблицаФормы.ВозможноРазвернуть() Тогда + Если Не ТаблицаФормы.Развернут() Тогда + ТаблицаФормы.Развернуть(); + КонецЕсли; + ТаблицаФормы.ПерейтиНаУровеньВниз(); + КонецЕсли; - Если ШагСценария = КликПоПервойСтрокеТаблицыФормы() Тогда - ПроверитьКомандныйИнтерфейсОкна(ТекущееОкно, ТестКлиент); - КонецЕсли; + ТаблицаФормы.Выбрать(); - ТекущееОкно.Закрыть(); + КонецЦикла; - Возврат Истина; + ПлагинТестКлиенты.ИдентифицироватьОкноПредупреждение(ТестКлиент, ШагСценария, Ложь); + + ТекущееОкно = ТестКлиент.ПолучитьАктивноеОкно(); + Если ПриКликеВТаблицеФормыНовоеОкноНеОткрылось(ТекущееОкно, ОкноСТаблицейФормы) Тогда + Если ТаблицаФормы.ТекущийРежимРедактирование() Тогда + ТаблицаФормы.ЗакончитьРедактированиеСтроки(); + КонецЕсли; + Результат = Истина; + Иначе + НажатьКнопкуЗаписать(ШагСценария, ТекущееОкно, ТестКлиент); + КонецЕсли; + + Если ШагСценария = КликПоПервойСтрокеТаблицыФормы() Тогда + ПроверитьКомандныйИнтерфейсОкна(ТекущееОкно, ТестКлиент); + КонецЕсли; + + Если ОкноСТаблицейФормы <> ТекущееОкно Тогда + ТекущееОкно.Закрыть(); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; КонецФункции @@ -527,12 +550,14 @@ КнопкаЗаписать.Нажать(); Исключение ТекстИсключения = ОписаниеОшибки(); - Если Найти(ТекстИсключения, "Неподходящий тип элемента управления для вызванного действия") = 0 Тогда + Если Найти(ТекстИсключения, "Неподходящий тип элемента управления для вызванного действия") = 0 + // У формы установлен признак ТолькоПросмотр + И Найти(ТекстИсключения, "Невидимый пользователю элемент управления не может выполнять интерактивные действия") = 0 Тогда КонтекстЯдра.ВызватьОшибкуПроверки(ТекстИсключения); КонецЕсли; КонецПопытки; - КонтекстЯдра.Плагин("ТестКлиенты").ИдентифицироватьОкноПредупреждение( + ПлагинТестКлиенты.ИдентифицироватьОкноПредупреждение( ТестКлиент, КонтекстЯдра.СтрШаблон_("%1: Кнопка ""Записать""", ШагСценария), Ложь); @@ -547,7 +572,7 @@ ТекКнопка.Нажать(); - КонтекстЯдра.Плагин("ТестКлиенты").ИдентифицироватьОкноПредупреждение( + ПлагинТестКлиенты.ИдентифицироватьОкноПредупреждение( ТестКлиент, КонтекстЯдра.СтрШаблон_("Командный интерфейс формы: ""%1""", ТекКнопка.ТекстЗаголовка), Ложь); @@ -576,3 +601,79 @@ Возврат "Клик по последней строке таблицы формы"; КонецФункции + +&НаКлиенте +Функция ТаблицаФормыДоступна(ТаблицаФормы) + Возврат ТаблицаФормы.ТекущаяДоступность() И ТаблицаФормы.ТекущаяВидимость() И Не ТаблицаФормы.ТекущееТолькоПросмотр(); +КонецФункции + +&НаКлиенте +Функция РазвернутьВетвьДерева(ТаблицаФормы) + + ТекущаяСтрока = ТекущаяСтрокаТаблицы(ТаблицаФормы); + + Пока ТаблицаФормы.ВозможноРазвернуть() Цикл + + Если Не ТаблицаФормы.Развернут(ТекущаяСтрока) Тогда + ТаблицаФормы.Развернуть(ТекущаяСтрока); + Если Не ТаблицаФормы.Развернут(ТекущаяСтрока) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + ТаблицаФормы.ПерейтиКПоследнейСтроке(Истина); + Если ТаблицаФормы.ПолучитьВыделенныеСтроки().Количество() <= 1 Тогда + ТаблицаФормы.ПерейтиКСтроке(ТекущаяСтрока, НаправлениеПереходаКСтроке.Вверх); + Прервать; + КонецЕсли; + + Если ТаблицаФормы.ПерейтиКСтроке(ТекущаяСтрока, НаправлениеПереходаКСтроке.Вверх) Тогда + ТаблицаФормы.ПерейтиНаУровеньВниз(); + КонецЕсли; + + мТекущаяСтрока = ТекущаяСтрокаТаблицы(ТаблицаФормы); + Если СтрокиТаблицыРавны(ТекущаяСтрока, мТекущаяСтрока) Тогда + Прервать; + Иначе + ТекущаяСтрока = мТекущаяСтрока; + КонецЕсли; + + КонецЦикла; + +КонецФункции + +&НаКлиенте +Функция ТекущаяСтрокаТаблицы(ТаблицаФормы) + + ВыделенныеСтроки = ТаблицаФормы.ПолучитьВыделенныеСтроки(); + + Если ВыделенныеСтроки.Количество() Тогда + ТекущаяСтрокаТаблицы = ВыделенныеСтроки[0]; + Иначе + ТекущаяСтрокаТаблицы = Новый Соответствие; + КонецЕсли; + + Возврат ТекущаяСтрокаТаблицы; + +КонецФункции + +&НаКлиенте +Функция СтрокиТаблицыРавны(Строка1, Строка2) + + Если ТипЗнч(Строка1) <> Тип("Соответствие") Или ТипЗнч(Строка2) <> Тип("Соответствие") Тогда + Возврат Ложь; + КонецЕсли; + + Если Строка1.Количество() <> Строка2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого КлючЗначение Из Строка1 Цикл + Если КлючЗначение.Значение <> Строка2[КлючЗначение.Ключ] Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции