Перейти к содержанию

Вопросы и ответы

  1. Как пропустить сценарий, чтобы он не падал?
    • Можно его закомментировать в тексте фичи (символ #)
    • Можно поставить сценарию тег - и использовать теги фильтры
    • Да пусть падает - тем более если он не реализован - то он будет желтым, а если реализован - тогда почему он падает?
  2. Как запустить фичу из поставки VA у себя в базе?
    • Большинство фич, которые идут в поставке VA, требуют, чтобы их запускали в специальной служебной базе.
    • Надо собрать служебную базу. Для этого надо загрузить CF из (.\vanessa-behavoir\lib\CF\83)
    • Надо руками в базе установить константу Путь к Vanessa Behavior - это полный путь к обработке vanessa-behavior.epf включая имя файла
    • Надо открыть в базе VA
    • Надо указать тег исключение IgnoreOnCIMainBuild (список исключаемых тегов)
    • Для ОФ надо ещё указать тег IgnoreOnOFBuilds
    • После этого можно загружать все фичи из каталога фич и запускать на выполнение.
  3. Как мне удалить в транзакции созданные данные?
    • В BDD необязательно их удалять за собой.
    • Если всё же хотите, Вы можете гарантированно удалить их в процедуре ПередОкончаниемСценария(). Она срабатывает в любом случае, даже если сценарий упал.
    • Если создавались данные из макета (Данные = Ванесса.СоздатьДанныеПоТабличномуДокументу(Макет)), то можно использовать метод Ванесса.УдалитьСозданныеДанные(Данные).
    • Лучше стремиться к тому, чтобы сценарий сам обеспечивал себе окружение, чтобы успешно выполниться.
  4. Где мне лучше создавать служебные данные для выполнения сценария?
    • В секции Контекст feature файла
    • В процедуре ПередНачаломСценария()
  5. Если в сценарии возникла ошибка, модальное окно и т.д. - как мне гарантированно закрыть все эти окна, чтобы следующий сценарий не падал?
    • В секции контекст надо добавить шаг И Я закрываю все окна клиентского приложения. А ещё лучше создать экспортный сценарий и в него добавить этот шаг. А в секции Контекст вызывать экспортный сценарий.
  6. Как проверять поведение системы под разными ролями?
    • Надо запустить несколько TestClient на разных портах и переключаться между ними.
  7. Как сохранять скриншоты при ошибках сценариев?

    Интерактивная настройка: + Закладка Сервис + далее Автоинструкции + поле Консольная команда создания скриншотов + после строки команды вставляется имя файла, и в таком виде команда запускается!

    Можно устанавливать + как 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='
  1. На CI сервере скриншот формируется, но вместо изображения чёрный экран. Как настроить сервер CI?
    • Запускать агент Jenkins в режиме сервиса нельзя. На CI надо настроить автовход под какой-либо учётной записью и в автозагрузку поместить команду запуска агента Jenkins.
    • Нельзя использовать для доступа к CI RDP. Вообще. Надо использовать другой софт для удаленного доступа к нему, например TightVNC. RDP полностью гасит видеокарту (виртуальную или настоящую) при отключении.
    • Надо посмотреть схему энергосбережения в панели управления, там может стоять отключение дисплея через пару минут. Это надо выключить.
  2. Почему у меня не работает тэг @tree
    • Для работы тега @tree надо использовать либо только табы, либо только пробелы. В пределах одной фичи нельзя в отступах строк использовать и пробелы и табы.
  3. Как поставить брейкпоинт во внешней обработке.
    • Для файловых баз брейкпоинты работают сразу
    • Для серверных баз, когда сервер 1С и сеанс TestManager расположены на разных ПК
      • Надо закрыть сеанс TestManager.
      • Надо открыть сеанс TestManager.
      • Надо открыть через меню файл/открыть обработку, в которой стоит брейкпоинт.
      • Только после пункта 3 надо открыть Vanessa-Behavior.
  4. Нужно ли запускать сеанс TestManager из конфигуратора для отладки? * Да. Лучше запускать из конфигуратора, а не подключаться потом, т.к. в платформе есть ошибка, из-за которой могут не работать брейкпонты в серверном коде, если конфигуратор был подключен к уже ранее запущенному сеансу TestManager.
  5. Я подключаюсь по RDP к серверу. И фича выполняется нормально, но если свернуть окно RPD, то возникает ошибка.
    • Это связано с особенностью платформы 1С. Некоторые методы платформы (кнопконажималки) не работают, когда погашена видеокарта (а RDP клиент её гасит, когда вы его сворачиваете). Поэтому не надо использовать RDP для доступа к CI (или другим) серверам, когда вы хотите использовать кнопконажималку.
  6. Я вызвал метод Ванесса.ЗапретитьВыполнениеШагов(), затем я подключаю свой таймер, и мне надо сделать, чтобы шаг упал.
    • в этом случае вместо вызова исключения надо сделать Ванесса.ПродолжитьВыполнениеШагов(Истина)
  7. Появляется ошибка, в которой есть текст: "Неизвестный идентификатор формы". Это означает, что, скорее всего, в одном сеансе открывались разные версии Vanessa Automation. Нужно перезапустить текущий сеанс 1С или перезапустить сервер 1С. Также помогает очистка кеша клиента и кеша сервера.
  8. Если вы используете версию платформы 8.3.9.2033 или новее, тогда может появиться окно Предупреждение безопасности.
    • Подробное описание механизма.
    • Если хотите выключить этот механизм для всех баз - пропишите в файле conf.cfg строку: DisableUnsafeActionProtection=.*
    • Также можно снять флаг "Защита от опасных действий" для конкретного пользователя
  9. Как использовать 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Скрипт().
  10. Как получить отчет Allure у себя на компьютере под Windows
    • скачать дистрибутив Allure
    • Надо прописать в Path каталог, где лежит allure.bat
    • Вызвать команду call allure generate {каталог где лежат ваши xml в формате Allure}
    • Вызвать команду call allure report open
  11. Как при возникновении ошибки на CI получить скриншоты всех окон 1С?
    • Пока эта фича работает только под Windows.
    • Надо в json файле, в котором указываются параметры запуска Vanessa-Behavior, указать строку: "СниматьСкриншотКаждогоОкна1С": "Истина"
    • Надо установить на CI сервер java 8 (если у вас Jenkins - то скорее всего она у вас уже есть)
    • Надо установить SikuliX версии 1.1 или выше. Там надо скачать sikulixsetup-1.1.1.jar.
    • Надо чтобы файл runsikulix.cmd был прописан в переменной PATH.
  12. Как вызвать ассерт в серверной процедуре/функции Надо создать экземпляр объекта обработки VanessaAutomation. Например, так: ВанессаСервер = Новый(Тип("ВнешняяОбработкаОбъект.VanessaAutomation")); ВанессаСервер.ПроверитьИстину(ПроверяемоеЗначение);
  13. Не срабатывает шаг И я нажимаю на кнопку выбора у поля "ИмяПоля" Такие шаги сначала пытаются активизировать поле, а затем нажимают на кнопку выбора у поля. Если у поля назначен обработчик при активизации поля, то шаг может не сработать и его надо заменить на шаг активизации поля.
  14. Как сделать в подсценарии необязательный параметр? Вот пример, когда в сценарии объявлен параметр "ДопПараметр", и он является необязательным. Далее переданное значение сохраняется в параметр "ЗначениеПараметра", и затем идёт проверка его значения.
  15. Чтобы запустить тесты в браузере надо:
    • Опубликовать базу
    • Задать любое имя подключения.
    • Указать тип подключения WEB.
    • В строке соединения указать правильную ссылку, которая начинается на http или ws.
    • Для файловой базы надо указать порт web сервера (обычно это 1538). Для серверной базы надо указать имя сервера и порт кластера (обычно 1541).
    • Т.е. TestManager общается с браузером либо через веб сервер для файловых баз, либо через сервер кластера для серверных баз.
  16. Как запомнить навигационную ссылку
    • Для окон, находящихся в панели открытых окон: Gherkin И я сохраняю навигационную ссылку текущего окна в переменную "ИмяПеременной"
    • Также можно использовать внешнюю компоненту, например, так: Gherkin И я закрываю все окна клиентского приложения И В командном интерфейсе я выбираю 'Основная' 'Справочник1' Тогда открылось окно 'Справочник1' И в таблице "Список" я выбираю текущую строку И я нажимаю сочетание клавиш "Ctrl+F11" И я нажимаю на кнопку с именем "BtnCopy" И я жду закрытия окна "Получение ссылки" в течение 20 секунд И Я запоминаю значение выражения 'Ванесса.БуферОбмена.Текст' в переменную "НавСсылка"
  17. Как отключить появление окна, при падении в дамп процесса 1С на windows?

    • Нужно в реестре установить значения параметров

      1. DontShowUI Ключ: HKLM:\Software\Microsoft\Windows\Windows Error Reporting Имя: DontShowUI Значение: 1 Тип: dword

      2. ShutdownReasonOn Ключ: HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonOn Значение: 0 Тип: dword

      3. ShutdownReasonUI Ключ: HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonUI Значение: 0 Тип: dword

  18. Как настроить сбор дампов на раннере?

    • Надо в каталоге 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", тип булево и установить её в Ложь.

  19. Как ускорить работу Vanessa Automation при локальной работе.

    • Если в конфигурации, в которой происходит локальный запуск Vanessa Automation запрещены синхронные вызовы, то лучше запускать сеанс 1С не из конфигуратора. Конфигуратор предаёт дополнительные ключи сеансу 1С при запуске (/EnableCheckExtensionsAndAddInsSyncCalls), которые полностью запрещают использование синхронных вызовов. Из-за этого Vanessa Automation будет использовать более медленные алгоритмы при работе с файлами. Если же запустить сеанс не из конфигуратора, то Vanessa Automation сможет использовать синхронные вызовы, несмотря на то, что в настройках конфигурации они запрещены. При этом можно подключиться конфигуратором к данному сеансу 1С отладчиком, и работать как будто этот сеанс запущен из конфигуратора.
  20. Как передавать сложные строки через переменные для использования во встроенном языке? Примеры:

    ```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 - КоллекцияКомандЗапуска() - форма УправляемаяФорма - ИменаКлючейОбщихНастроек() - модуль объекта - СтруктураОбщихНастроек()

  21. Если тест "Проверка, что для каждого элемента формы есть урок" выдаёт исключение об элементе формы, по которому не должно быть уроков, его надо добавить в исключения в методе ЭтотЭлементЯвляетсяИсключением(), который находится в features\Libraries\VB\step_definitions\ТестированиеVA.epf

  22. Если для запуска Vanessa Automation используется утилита vrunner, то нужно в файле настроек vrunner задавать параметр --pathvanessa, где указан путь к обработке vanessa-automation.epf или vanessa-automation-single.epf.
  23. Установка внешней компоненты VanessaExt, альтернативные варианты:
    1. Когда компонента ставится в каталог %APPDATA%\1C\1Cv8\ExtCompT в нём появляются определенные файлы, связаные с компонентой. Подробнее тут https://its.1c.ru/db/v8324doc#bookmark:dev:TI000001195 Если эти файлы положить в этот катлог заранее, до запуска сеанса 1С, то компонента будет считаться установленной.
    2. Можно перед запуском тестов сделать дополнительный запуск 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 и включает компоненту. После этого следующие запуски тестов будут считать, что компонента уже установлена.
  24. В платфоме есть два метода, чтобы показать пользователю выбор из списка (меню) ПоказатьВыборИзСписка() ПоказатьВыборИзМеню() Визуально результат может не отличаться, но с точки зрения API автотестов это разные сущности. Для работы с меню есть свои шаги: И в меню формы я выбираю 'Пункт1' Для работы со списком есть свои шаги: И я выбираю из списка 'Пункт1'
  25. Как проверить значение в таблице когда заголовок колонки заранее не известен. Можно запомнить заголовок колонки в переменную и далее её использовать. И я запоминаю заголовок поля с именем "РеквизитСтрока" как "ЗаголовокКолонки" Тогда таблица 'Список' стала равной: | 'Наименование' | '$ЗаголовокКолонки$' | | 'Тестовый Элемент 1' | '' | | 'Тестовый Элемент 2' | '' |
  26. Как сделать, так, чтобы смена даты во время выполнения сценария не приводила к падению сценария
  27. Правильно сделать так, чтобы сценарий не был чувствителен к смене даты
  28. Если так сделать не получается то надо использовать конструкцию вида Если текущее время в диапазоне от "23:30:00" до "23:59:59" Тогда Тогда я жду наступления времени "00:00:00" Эти шаги замедлят выполнение сценария, но позволят избежать смены даты во время его работы.
  29. Как сделать, чтобы тест запускался только на тегированных сборках (Gitlab CI)
  30. Может возникнуть задача, чтобы часть тестов запускалась только на сборках, помеченных тегами.
  31. Для этого надо использовать такие шаги И Я запоминаю значение переменной среды 'CI_COMMIT_TAG' в переменную 'ЗначениеПеременнойСреды' Если 'НЕ ЗначениеЗаполнено(Контекст.ЗначениеПеременнойСреды)' Тогда Затем я останавливаю выполнение сценария "Passed"
  32. Как сделать, чтобы завершение серверного вызова не затирало текст в редактируемом поле
  33. Чтобы отключить в текущей форме надо использовать шаг И я отключаю обновление текста редактирования полей в текущем окне (расширение)
  34. Чтобы отключить для всех окон клиента тестирования надо включить настройку Vanessa Automation И я устанавливаю флаг настройки Vanessa Automation "ОтключатьДляПолейВозможностьЗатиранияТекстаПриСерверномВызове"
  35. В этом случае при каждом вызове шага "Тогда открылось окно" будет изменяться свойство "ОбновлениеТекстаРедактирования" у полей текущей формы клиента тестирования