Вопросы и ответы¶
- Как пропустить сценарий, чтобы он не падал?
- Можно его закомментировать в тексте фичи (символ #)
- Можно поставить сценарию тег - и использовать теги фильтры
- Да пусть падает - тем более если он не реализован - то он будет желтым, а если реализован - тогда почему он падает?
- Как запустить фичу из поставки 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:json "ДелатьСкриншотПриВозникновенииОшибки": true, "СниматьСкриншотКаждогоОкна1С": true, "КаталогOutputСкриншоты": "$workspaceRoot/build/out/ScreenShots", "КомандаСделатьСкриншот": "nircmd savescreenshot "или для `IrfanView`:json "ДелатьСкриншотПриВозникновенииОшибки": true, "СниматьСкриншотКаждогоОкна1С": true, "КаталогOutputСкриншоты": "$workspaceRoot/build/out/ScreenShots", "КомандаСделатьСкриншот": '"C:\Program Files (x86)\IrfanView\i_view32.exe" /capture=1 /convert=' -
-
На CI сервере скриншот формируется, но вместо изображения чёрный экран. Как настроить сервер CI?
- Запускать агент Jenkins в режиме сервиса нельзя. На CI надо настроить автовход под какой-либо учётной записью и в автозагрузку поместить команду запуска агента Jenkins.
- Надо посмотреть схему энергосбережения в панели управления, там может стоять отключение дисплея через пару минут. Это надо выключить.
-
Проблема «чёрного экрана» чаще всего связана с использованием RDP. При закрытии окна RDP сеанс переходит в состояние «отключено», графическая оболочка перестает выводиться, и на скриншотах появляется черный экран. Для решения этой проблемы существует два подхода:
Вариант 1: Полный отказ от RDP Используйте другой софт для удаленного доступа к серверу, который не гасит видеокарту при отключении, например TightVNC.
Вариант 2: Корректное завершение RDP-сессии Чтобы сохранить активную графическую среду, необходимо корректно завершать RDP-сессию, переключая ее на локальную консоль.
Порядок действий для переключения RDP-сессии на локальную консоль:
Определение ID текущего сеанса. Выполните команду на удаленном сервере:
qwinstaПереключение сеанса на консоль. Выполните следующую команду от имени администратора, указав найденный ID:%windir%\System32\tscon.exe <ID сеанса> /dest:consoleПосле выполнения команда корректно отключает RDP, сохраняя при этом активную графическую среду на локальной консоли. Это исключает проблему черного экрана на скриншотах во время автотестов. 9. Почему у меня не работает тэг @tree * Для работы тега @tree надо использовать либо только табы, либо только пробелы. В пределах одной фичи нельзя в отступах строк использовать и пробелы и табы. 10. Как поставить брейкпоинт во внешней обработке. * Для файловых баз брейкпоинты работают сразу * Для серверных баз, когда сервер 1С и сеанс TestManager расположены на разных ПК * Надо закрыть сеанс TestManager. * Надо открыть сеанс TestManager. * Надо открыть через меню файл/открыть обработку, в которой стоит брейкпоинт. * Только после пункта 3 надо открыть Vanessa-Behavior. 11. Нужно ли запускать сеанс TestManager из конфигуратора для отладки? * Да. Лучше запускать из конфигуратора, а не подключаться потом, т.к. в платформе есть ошибка, из-за которой могут не работать брейкпонты в серверном коде, если конфигуратор был подключен к уже ранее запущенному сеансу TestManager. 12. Я подключаюсь по RDP к серверу. И фича выполняется нормально, но если свернуть окно RPD, то возникает ошибка. * Это связано с особенностью платформы 1С. Некоторые методы платформы (кнопконажималки) не работают, когда погашена видеокарта (а RDP клиент её гасит, когда вы его сворачиваете). Поэтому не надо использовать RDP для доступа к CI (или другим) серверам, когда вы хотите использовать кнопконажималку. 13. Я вызвал метод Ванесса.ЗапретитьВыполнениеШагов(), затем я подключаю свой таймер, и мне надо сделать, чтобы шаг упал. * в этом случае вместо вызова исключения надо сделать Ванесса.ПродолжитьВыполнениеШагов(Истина) 14. Появляется ошибка, в которой есть текст: "Неизвестный идентификатор формы". Это означает, что, скорее всего, в одном сеансе открывались разные версии Vanessa Automation. Нужно перезапустить текущий сеанс 1С или перезапустить сервер 1С. Также помогает очистка кеша клиента и кеша сервера. 15. Если вы используете версию платформы 8.3.9.2033 или новее, тогда может появиться окно Предупреждение безопасности. * Подробное описание механизма. * Если хотите выключить этот механизм для всех баз - пропишите в файле conf.cfg строку: DisableUnsafeActionProtection=. * Также можно снять флаг "Защита от опасных действий" для конкретного пользователя
16. Как использовать 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Скрипт().
17. Как получить отчет Allure у себя на компьютере под Windows
* скачать дистрибутив Allure
* Надо прописать в Path каталог, где лежит allure.bat
* Вызвать команду call allure generate {каталог где лежат ваши xml в формате Allure}
* Вызвать команду call allure report open*
18. Как при возникновении ошибки на CI получить скриншоты всех окон 1С?
* Пока эта фича работает только под Windows.
* Надо в json файле, в котором указываются параметры запуска Vanessa-Behavior, указать строку: "СниматьСкриншотКаждогоОкна1С": "Истина"* Надо установить на CI сервер java 8 (если у вас Jenkins - то скорее всего она у вас уже есть) * Надо установить SikuliX версии 1.1 или выше. Там надо скачать sikulixsetup-1.1.1.jar. * Надо чтобы файл runsikulix.cmd был прописан в переменной PATH. 19. Как вызвать ассерт в серверной процедуре/функции Надо создать экземпляр объекта обработки VanessaAutomation. Например, так: ВанессаСервер = Новый(Тип("ВнешняяОбработкаОбъект.VanessaAutomation")); ВанессаСервер.ПроверитьИстину(ПроверяемоеЗначение); 20. Не срабатывает шаг И я нажимаю на кнопку выбора у поля "ИмяПоля" Такие шаги сначала пытаются активизировать поле, а затем нажимают на кнопку выбора у поля. Если у поля назначен обработчик при активизации поля, то шаг может не сработать и его надо заменить на шаг активизации поля. 21. Как сделать в подсценарии необязательный параметр? Вот пример, когда в сценарии объявлен параметр "ДопПараметр", и он является необязательным. Далее переданное значение сохраняется в параметр "ЗначениеПараметра", и затем идёт проверка его значения. 22. Чтобы запустить тесты в браузере надо: * Опубликовать базу * Задать любое имя подключения. * Указать тип подключения WEB. * В строке соединения указать правильную ссылку, которая начинается на http или ws. * Для файловой базы надо указать порт web сервера (обычно это 1538). Для серверной базы надо указать имя сервера и порт кластера (обычно 1541). * Т.е. TestManager общается с браузером либо через веб сервер для файловых баз, либо через сервер кластера для серверных баз. 23. Как запомнить навигационную ссылку * Для всех оконGherkin И я сохраняю навигационную ссылку текущего окна в переменную "ИмяПеременной"* (Устарело) Также можно использовать внешнюю компоненту, например, так:Gherkin И я закрываю все окна клиентского приложения И В командном интерфейсе я выбираю 'Основная' 'Справочник1' Тогда открылось окно 'Справочник1' И в таблице "Список" я выбираю текущую строку И я нажимаю сочетание клавиш "Ctrl+F11" И я нажимаю на кнопку с именем "BtnCopy" И я жду закрытия окна "Получение ссылки" в течение 20 секунд И Я запоминаю значение выражения 'Ванесса.БуферОбмена.Текст' в переменную "НавСсылка"24. Как отключить появление окна, при падении в дамп процесса 1С на windows? * Нужно в реестре установить значения параметров1. DontShowUI Ключ: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting Имя: DontShowUI Значение: 1 Тип: dword 2. ShutdownReasonOn Ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonOn Значение: 0 Тип: dword 3. ShutdownReasonUI Ключ: HKEY_LOCAL_MACHINE\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 автотестов это разные сущности.
-
Для работы с меню есть свои шаги:
Gherkin И в меню формы я выбираю 'Пункт1'* Для работы со списком есть свои шаги:Gherkin И я выбираю из списка 'Пункт1'38. Как проверить значение в таблице когда заголовок колонки заранее не известен. * Можно запомнить заголовок колонки в переменную и далее её использовать.Gherkin И я запоминаю заголовок поля с именем "РеквизитСтрока" как "ЗаголовокКолонки" Тогда таблица 'Список' стала равной: | 'Наименование' | '$ЗаголовокКолонки$' | | 'Тестовый Элемент 1' | '' | | 'Тестовый Элемент 2' | '' |39. Как сделать, так, чтобы смена даты во время выполнения сценария не приводила к падению сценария * Правильно сделать так, чтобы сценарий не был чувствителен к смене даты * Если так сделать не получается то надо использовать конструкцию видаGherkin Если текущее время в диапазоне от "23:30:00" до "23:59:59" Тогда Тогда я жду наступления времени "00:00:00"* Эти шаги замедлят выполнение сценария, но позволят избежать смены даты во время его работы. 40. Как сделать, чтобы тест запускался только на тегированных сборках (Gitlab CI) * Может возникнуть задача, чтобы часть тестов запускалась только на сборках, помеченных тегами. * Для этого надо использовать такие шагиGherkin И Я запоминаю значение переменной среды 'CI_COMMIT_TAG' в переменную 'ЗначениеПеременнойСреды' Если 'НЕ ЗначениеЗаполнено(Контекст.ЗначениеПеременнойСреды)' Тогда Затем я останавливаю выполнение сценария "Passed"41. Как сделать, чтобы завершение серверного вызова не затирало текст в редактируемом поле * Чтобы отключить в текущей форме надо использовать шагGherkin И я отключаю обновление текста редактирования полей в текущем окне (расширение)* Чтобы отключить для всех окон клиента тестирования надо включить настройку Vanessa AutomationGherkin И я устанавливаю флаг настройки Vanessa Automation "ОтключатьДляПолейВозможностьЗатиранияТекстаПриСерверномВызове"* В этом случае при каждом вызове шага "Тогда открылось окно" будет изменяться свойство "ОбновлениеТекстаРедактирования" у полей текущей формы клиента тестирования * Также можно в конфигураторе/EDT поставить полю свойство "ОбновлениеТекстаРедактирования" в значение ОбновлениеТекстаРедактирования.ПриИзмененииЗначения * Подробнее эта проблема описана тут https://its.1c.ru/db/v8327doc#bookmark:dev:TI000001765 пункт "7.7.4.2. Обновление отображаемых данных" 42. Как прочитать значение из переменной среды * Например, чтобы не хранить логины и пароли внутри сценария. * Для этого нужно прочитать значение из переменной среды в обычную переменную сценарияGherkin И Я запоминаю значение переменной среды 'MY_LOGIN' в переменную 'Логин' И в поле с именем 'Наименование' я ввожу текст "$Логин$"43. Как программно определить в каком интерфейсе запущен сеанс 1Сbsl КлиентскоеПриложение.ТекущийВариантИнтерфейса()43. Нужно активизировать нужное окно, но в клиенте тестирования несколько окон с одинаковым заголовком * Чтобы решить такую задачу, нужно самостоятельно устанавливать окнам клиента тестирования уникальный заголовок * Это можно сделать с помощью шагаGherkin И я выполняю выражение '_ТекущееОкно.Заголовок = "МойЗаголовок"' в текущем окне (Расширение)44. Как убрать окошко остановки выполнения сценария в верхней части экрана * Для этого надо перейти в Сервис -> Выполнение сценариев -> Снять флаг "Показывать окно остановки выполнения сценария"
-