Вопросы и ответы¶
- Как пропустить сценарий, чтобы он не падал?
- Можно его закомментировать в тексте фичи (символ #)
- Можно поставить сценарию тег - и использовать теги фильтры
- Да пусть падает - тем более если он не реализован - то он будет желтым, а если реализован - тогда почему он падает?
- Как запустить фичу из поставки VA у себя в базе?
- Большинство фич, которые идут в поставке VA, требуют, чтобы их запускали в специальной служебной базе.
- Надо собрать служебную базу. Для этого надо загрузить CF из (.\vanessa-behavoir\lib\CF\83)
- Надо руками в базе установить константу Путь к Vanessa Behavior - это полный путь к обработке vanessa-behavior.epf включая имя файла
- Надо открыть в базе VA
- Надо указать тег исключение IgnoreOnCIMainBuild (список исключаемых тегов)
- Для ОФ надо ещё указать тег IgnoreOnOFBuilds
- После этого можно загружать все фичи из каталога фич и запускать на выполнение.
- Как мне удалить в транзакции созданные данные?
- В BDD необязательно их удалять за собой.
- Если всё же хотите, Вы можете гарантированно удалить их в процедуре ПередОкончаниемСценария(). Она срабатывает в любом случае, даже если сценарий упал.
- Если создавались данные из макета (Данные = Ванесса.СоздатьДанныеПоТабличномуДокументу(Макет)), то можно использовать метод Ванесса.УдалитьСозданныеДанные(Данные).
- Лучше стремиться к тому, чтобы сценарий сам обеспечивал себе окружение, чтобы успешно выполниться.
- Где мне лучше создавать служебные данные для выполнения сценария?
- В секции Контекст feature файла
- В процедуре ПередНачаломСценария()
- Если в сценарии возникла ошибка, модальное окно и т.д. - как мне гарантированно закрыть все эти окна, чтобы следующий сценарий не падал?
- В секции контекст надо добавить шаг И Я закрываю все окна клиентского приложения. А ещё лучше создать экспортный сценарий и в него добавить этот шаг. А в секции Контекст вызывать экспортный сценарий.
- Как проверять поведение системы под разными ролями?
- Надо запустить несколько TestClient на разных портах и переключаться между ними.
-
Как сохранять скриншоты при ошибках сценариев?
Интерактивная настройка: + Закладка
Сервис
+ далееАвтоинструкции
+ полеКонсольная команда создания скриншотов
+ после строки команды вставляется имя файла, и в таком виде команда запускается!Можно устанавливать + как
NirCMD
+ http://www.nirsoft.net/utils/nircmd.zip + командаnircmd savescreenshot
-
так и
IrfanView
- команда
"C:\Program Files (x86)\IrfanView\i_view32.exe" /capture=1 /convert=
- команда
-
Важно только устанавливать 32-разрядные версии !!
Примеры json-файла настройки фиксации скриншотов для
NirCMD
: -
"ДелатьСкриншотПриВозникновенииОшибки": true,
"СниматьСкриншотКаждогоОкна1С": true,
"КаталогOutputСкриншоты": "$workspaceRoot/build/out/ScreenShots",
"КомандаСделатьСкриншот": "nircmd savescreenshot "
или для `IrfanView`:
"ДелатьСкриншотПриВозникновенииОшибки": true,
"СниматьСкриншотКаждогоОкна1С": true,
"КаталогOutputСкриншоты": "$workspaceRoot/build/out/ScreenShots",
"КомандаСделатьСкриншот": '"C:\Program Files (x86)\IrfanView\i_view32.exe" /capture=1 /convert='
- На CI сервере скриншот формируется, но вместо изображения чёрный экран. Как настроить сервер CI?
- Запускать агент Jenkins в режиме сервиса нельзя. На CI надо настроить автовход под какой-либо учётной записью и в автозагрузку поместить команду запуска агента Jenkins.
- Нельзя использовать для доступа к CI RDP. Вообще. Надо использовать другой софт для удаленного доступа к нему, например TightVNC. RDP полностью гасит видеокарту (виртуальную или настоящую) при отключении.
- Надо посмотреть схему энергосбережения в панели управления, там может стоять отключение дисплея через пару минут. Это надо выключить.
- Почему у меня не работает тэг @tree
- Для работы тега @tree надо использовать либо только табы, либо только пробелы. В пределах одной фичи нельзя в отступах строк использовать и пробелы и табы.
- Как поставить брейкпоинт во внешней обработке.
- Для файловых баз брейкпоинты работают сразу
- Для серверных баз, когда сервер 1С и сеанс TestManager расположены на разных ПК
- Надо закрыть сеанс TestManager.
- Надо открыть сеанс TestManager.
- Надо открыть через меню файл/открыть обработку, в которой стоит брейкпоинт.
- Только после пункта 3 надо открыть Vanessa-Behavior.
- Нужно ли запускать сеанс TestManager из конфигуратора для отладки? * Да. Лучше запускать из конфигуратора, а не подключаться потом, т.к. в платформе есть ошибка, из-за которой могут не работать брейкпонты в серверном коде, если конфигуратор был подключен к уже ранее запущенному сеансу TestManager.
- Я подключаюсь по RDP к серверу. И фича выполняется нормально, но если свернуть окно RPD, то возникает ошибка.
- Это связано с особенностью платформы 1С. Некоторые методы платформы (кнопконажималки) не работают, когда погашена видеокарта (а RDP клиент её гасит, когда вы его сворачиваете). Поэтому не надо использовать RDP для доступа к CI (или другим) серверам, когда вы хотите использовать кнопконажималку.
- Я вызвал метод Ванесса.ЗапретитьВыполнениеШагов(), затем я подключаю свой таймер, и мне надо сделать, чтобы шаг упал.
- в этом случае вместо вызова исключения надо сделать Ванесса.ПродолжитьВыполнениеШагов(Истина)
- Появляется ошибка, в которой есть текст: "Неизвестный идентификатор формы". Это означает, что, скорее всего, в одном сеансе открывались разные версии Vanessa Automation. Нужно перезапустить текущий сеанс 1С или перезапустить сервер 1С. Также помогает очистка кеша клиента и кеша сервера.
- Если вы используете версию платформы 8.3.9.2033 или новее, тогда может появиться окно Предупреждение безопасности.
- Подробное описание механизма.
- Если хотите выключить этот механизм для всех баз - пропишите в файле conf.cfg строку: DisableUnsafeActionProtection=.*
- Также можно снять флаг "Защита от опасных действий" для конкретного пользователя
- Как использовать Sikuli-скрипты (устаревшее).
- Установите SikuliX согласно инструкции http://sikulix.com/quickstart/;
- Ознакомьтесь с http://sikulix-2014.readthedocs.io/en/latest/faq/010-command-line.html;
- Укажите через path путь к каталогу с runsikulix(.cmd);
- Разрабатывайте свои Sikuli-скрипты с помощью SikuiliX IDE (http://sikulix-2014.readthedocs.io/en/latest/index.html) либо используйте имеющиеся;
- Выполнение скрипта в реализации шага вызывайте через Ванесса.ВыполнитьSikuliСкрипт().
- Как получить отчет Allure у себя на компьютере под Windows
- скачать дистрибутив Allure
- Надо прописать в Path каталог, где лежит allure.bat
- Вызвать команду call allure generate {каталог где лежат ваши xml в формате Allure}
- Вызвать команду call allure report open
- Как при возникновении ошибки на CI получить скриншоты всех окон 1С?
- Пока эта фича работает только под Windows.
- Надо в json файле, в котором указываются параметры запуска Vanessa-Behavior, указать строку:
"СниматьСкриншотКаждогоОкна1С": "Истина"
- Надо установить на CI сервер java 8 (если у вас Jenkins - то скорее всего она у вас уже есть)
- Надо установить SikuliX версии 1.1 или выше. Там надо скачать sikulixsetup-1.1.1.jar.
- Надо чтобы файл runsikulix.cmd был прописан в переменной PATH.
- Как вызвать ассерт в серверной процедуре/функции Надо создать экземпляр объекта обработки VanessaAutomation. Например, так: ВанессаСервер = Новый(Тип("ВнешняяОбработкаОбъект.VanessaAutomation")); ВанессаСервер.ПроверитьИстину(ПроверяемоеЗначение);
- Не срабатывает шаг И я нажимаю на кнопку выбора у поля "ИмяПоля" Такие шаги сначала пытаются активизировать поле, а затем нажимают на кнопку выбора у поля. Если у поля назначен обработчик при активизации поля, то шаг может не сработать и его надо заменить на шаг активизации поля.
- Как сделать в подсценарии необязательный параметр? Вот пример, когда в сценарии объявлен параметр "ДопПараметр", и он является необязательным. Далее переданное значение сохраняется в параметр "ЗначениеПараметра", и затем идёт проверка его значения.
- Чтобы запустить тесты в браузере надо:
- Опубликовать базу
- Задать любое имя подключения.
- Указать тип подключения WEB.
- В строке соединения указать правильную ссылку, которая начинается на http или ws.
- Для файловой базы надо указать порт web сервера (обычно это 1538). Для серверной базы надо указать имя сервера и порт кластера (обычно 1541).
- Т.е. TestManager общается с браузером либо через веб сервер для файловых баз, либо через сервер кластера для серверных баз.
- Как запомнить навигационную ссылку
- Для окон, находящихся в панели открытых окон:
Gherkin И я сохраняю навигационную ссылку текущего окна в переменную "ИмяПеременной"
- Также можно использовать внешнюю компоненту, например, так:
Gherkin И я закрываю все окна клиентского приложения И В командном интерфейсе я выбираю 'Основная' 'Справочник1' Тогда открылось окно 'Справочник1' И в таблице "Список" я выбираю текущую строку И я нажимаю сочетание клавиш "Ctrl+F11" И я нажимаю на кнопку с именем "BtnCopy" И я жду закрытия окна "Получение ссылки" в течение 20 секунд И Я запоминаю значение выражения 'Ванесса.БуферОбмена.Текст' в переменную "НавСсылка"
- Для окон, находящихся в панели открытых окон:
-
Как отключить появление окна, при падении в дамп процесса 1С на windows?
-
Нужно в реестре установить значения параметров
-
DontShowUI Ключ: HKLM:\Software\Microsoft\Windows\Windows Error Reporting Имя: DontShowUI Значение: 1 Тип: dword
-
ShutdownReasonOn Ключ: HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonOn Значение: 0 Тип: dword
-
ShutdownReasonUI Ключ: HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonUI Значение: 0 Тип: dword
-
-
-
Как настроить сбор дампов на раннере?
-
Надо в каталоге C:\Program Files (x86)\1cv8\conf создать файл logcfg.xml с таким содержимым (если его нет) или дополнить файл, если он есть.
xml <config xmlns="http://v8.1c.ru/v8/tech-log"> <dump location="КаталогДляДампов" create="1" type="2"/> </config>
Для проверки формирования дампов достаточно создать обработку с бесконечным рекурсивным вызовом. Пример кода: ``` 1C &НаКлиенте Процедура ВызватьПроцедуру() ВызватьПроцедуру(); КонецПроцедуры
&НаКлиенте Процедура ПриОткрытии(Отказ) ВызватьПроцедуру(); КонецПроцедуры ``` 26. Как сделать из обычного шага шаг-условие?
Для этого надо:
1. Обязательно использовать ключевое слово "Если" (If для английского языка) 2. В конце шага добавить слово Тогда (Then для английского языка) Пример
```Gherkin
Обычный шаг¶
И я нажимаю на кнопку с именем "ИмяКнопки"
Обычный шаг стал шагом-условием¶
Если И я нажимаю на кнопку с именем "ИмяКнопки" Тогда ``` 27. Как сделать, чтобы при запуске тестов на CI сервере отключить инициализацию редактора в процедуре ПриСозданииНаСервере()
Для этого надо в базе, где запускается Vanessa Automation добавить константу "ИнициализироватьVanessaEditor", тип булево и установить её в Ложь.
-
-
Как ускорить работу Vanessa Automation при локальной работе.
- Если в конфигурации, в которой происходит локальный запуск Vanessa Automation запрещены синхронные вызовы, то лучше запускать сеанс 1С не из конфигуратора. Конфигуратор предаёт дополнительные ключи сеансу 1С при запуске (/EnableCheckExtensionsAndAddInsSyncCalls), которые полностью запрещают использование синхронных вызовов. Из-за этого Vanessa Automation будет использовать более медленные алгоритмы при работе с файлами. Если же запустить сеанс не из конфигуратора, то Vanessa Automation сможет использовать синхронные вызовы, несмотря на то, что в настройках конфигурации они запрещены. При этом можно подключиться конфигуратором к данному сеансу 1С отладчиком, и работать как будто этот сеанс запущен из конфигуратора.
-
Как передавать сложные строки через переменные для использования во встроенном языке? Примеры:
```Gherkin // Первый вариант И я запоминаю содержимое файла "C:\Temp\Untitled-2.xml" в переменную "ИмяПеременной1" И Я запоминаю значение выражения 'СтрЗаменить($ИмяПеременной1$, """", """""")' в переменную "ИмяПеременной1" И Я запоминаю значение выражения 'СтрЗаменить($ИмяПеременной1$, Символы.ПС, Символы.ПС + "|")' в переменную "ИмяПеременной1" И я выполняю код встроенного языка на сервере """bsl Сообщить("$ИмяПеременной1$"); """
// Второй вариант И я запоминаю содержимое файла "C:\Temp\Untitled-2.xml" в переменную "ИмяПеременной2" И я выполняю код встроенного языка """bsl Ванесса.Объект.ЗначениеНаСервере = Контекст.ИмяПеременной2; """ И я выполняю код встроенного языка на сервере """bsl Сообщить(Объект.ЗначениеНаСервере); """ И я выполняю код встроенного языка """bsl Контекст.ИмяПеременной2 = Ванесса.Объект.ЗначениеНаСервере; """ ``` 30. Для использования функционала UI Automation, при создании инструкций, откуда и как получать значения Имя, Тип и PID? Надо установить windows sdk. Тогда появится файл вида C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\inspect.exe Это инспектор объектов UI Automation. Также есть альтернативный инспектор объектов 31. Как передать значение переменной с клиента на сервер, затем изменить значение на сервере и вернуть новое значение обратно в переменную Примеры:
``` // 1. Значение помещается в переменную И я запоминаю строку "НужнаяСтрока" в переменную "ИмяПеременной"
// 2. Значение переменной помещается в Объект в специальный реквизит ЗначениеНаСервере И я выполняю код встроенного языка """bsl Ванесса.Объект.ЗначениеНаСервере = Контекст.ИмяПеременной; """
// 3. Теперь значение переменной доступно на сервере. И там его можно изменить. И я выполняю код встроенного языка на сервере """bsl Сообщить(Объект.ЗначениеНаСервере); Объект.ЗначениеНаСервере = "Новое значение"; """
// 4. Полученное значение помещается из Объекта в обычную переменную И я выполняю код встроенного языка """bsl Контекст.ИмяПеременной = Ванесса.Объект.ЗначениеНаСервере; """ ``` 32. Для работы редактора VAEditor в базе, где запускается Vanessa Automaion должна использоваться платформа 8.3.14 или выше, и режим совместимости должен быть установлен 8.3.7 или выше. 33. Как правильно добавить новую настройку Vanessa Automaion? Нужно добавить новый реквизит к объекту обработки Vanessa Automaion. Далее его надо прописать в: - форма ОбщегоНазначенияVA - КоллекцияКомандЗапуска() - форма УправляемаяФорма - ИменаКлючейОбщихНастроек() - модуль объекта - СтруктураОбщихНастроек()
-
Если тест "Проверка, что для каждого элемента формы есть урок" выдаёт исключение об элементе формы, по которому не должно быть уроков, его надо добавить в исключения в методе ЭтотЭлементЯвляетсяИсключением(), который находится в features\Libraries\VB\step_definitions\ТестированиеVA.epf
- Если для запуска Vanessa Automation используется утилита vrunner, то нужно в файле настроек vrunner задавать параметр --pathvanessa, где указан путь к обработке vanessa-automation.epf или vanessa-automation-single.epf.
- Установка внешней компоненты VanessaExt, альтернативные варианты:
- Когда компонента ставится в каталог %APPDATA%\1C\1Cv8\ExtCompT в нём появляются определенные файлы, связаные с компонентой. Подробнее тут https://its.1c.ru/db/v8324doc#bookmark:dev:TI000001195 Если эти файлы положить в этот катлог заранее, до запуска сеанса 1С, то компонента будет считаться установленной.
- Можно перед запуском тестов сделать дополнительный запуск VA, в котором будет выполнен данный сценарий https://github.com/Pr-Mex/vanessa-automation/blob/develop/features/Core/ScreenShot/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8BVanessaExt.feature Этот сценарий запускает клиент тестирования, открывает в нём другой экземпляр VA и включает компоненту. После этого следующие запуски тестов будут считать, что компонента уже установлена.
- В платфоме есть два метода, чтобы показать пользователю выбор из списка (меню)
ПоказатьВыборИзСписка()
ПоказатьВыборИзМеню()
Визуально результат может не отличаться, но с точки зрения API автотестов это разные сущности.
Для работы с меню есть свои шаги:
И в меню формы я выбираю 'Пункт1'
Для работы со списком есть свои шаги:И я выбираю из списка 'Пункт1'