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

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

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. Как сохранять скриншоты при ошибках сценариев?

  • Интерактивная настройка: Закладка Сервис -> далее Автоинструкции -> поле Консольная команда создания скриншотов -> после строки команды вставляется имя файла, и в таком виде команда запускается
  • ПО для скриншотов (важно только устанавливать 32-разрядные версии)
  • NirCMD (команда nircmd savescreenshot)
    • Пример json-файла настройки фиксации скриншотов json "ДелатьСкриншотПриВозникновенииОшибки": true, "СниматьСкриншотКаждогоОкна1С": true, "КаталогOutputСкриншоты": "$workspaceRoot/build/out/ScreenShots", "КомандаСделатьСкриншот": "nircmd savescreenshot"
  • IrfanView (команда "C:\Program Files (x86)\IrfanView\i_view32.exe" /capture=1 /convert=)
    • Пример json-файла настройки фиксации скриншотов json "ДелатьСкриншотПриВозникновенииОшибки": true, "СниматьСкриншотКаждогоОкна1С": true, "КаталогOutputСкриншоты": "$workspaceRoot/build/out/ScreenShots", "КомандаСделатьСкриншот": '"C:\Program Files (x86)\IrfanView\i_view32.exe" /capture=1 /convert='

8. На CI сервере скриншот формируется, но вместо изображения чёрный экран

  • Запускать агент Jenkins в режиме сервиса нельзя. На CI надо настроить автовход под какой-либо учётной записью и в автозагрузку поместить команду запуска агента Jenkins
  • Надо посмотреть схему энергосбережения в панели управления, там может стоять отключение дисплея через пару минут. Это надо выключить
  • Проблема «чёрного экрана» чаще всего связана с использованием RDP. При закрытии окна RDP сеанс переходит в состояние «отключено», графическая оболочка перестает выводиться, и на скриншотах появляется черный экран. Для решения этой проблемы существует два подхода:
    • Полный отказ от RDP: используйте другой софт для удаленного доступа к серверу, который не гасит видеокарту при отключении, например TightVNC
    • Корректное завершение 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 к серверу. И фича выполняется нормально, но если свернуть окно RDP, то возникает ошибка

  • Это связано с особенностью платформы 1С. Некоторые методы платформы (кнопконажималки) не работают, когда погашена видеокарта (а RDP клиент её гасит, когда вы его сворачиваете). Поэтому не надо использовать RDP для доступа к CI (или другим) серверам, когда вы хотите использовать кнопконажималку

13. Я вызвал метод Ванесса.ЗапретитьВыполнениеШагов(), затем я подключаю свой таймер, как мне сделать, чтобы шаг упал?

  • В этом случае вместо вызова исключения надо сделать Ванесса.ПродолжитьВыполнениеШагов(Истина)

14. Появляется ошибка, в которой есть текст: Неизвестный идентификатор формы

  • Это означает, что, скорее всего, в одном сеансе открывались разные версии Vanessa Automation
  • Нужно перезапустить текущий сеанс 1С или перезапустить сервер 1С
  • Также помогает очистка кеша клиента и кеша сервера

15. Если вы используете версию платформы 8.3.9.2033 или новее, тогда может появиться окно Предупреждение безопасности

  • Подробное описание механизма
  • Если хотите выключить этот механизм для всех баз - пропишите в файле conf.cfg строку DisableUnsafeActionProtection=.*
  • Также можно снять флаг Защита от опасных действий для конкретного пользователя

16. Как использовать Sikuli-скрипты? (устаревшее)

  • Установите SikuliX согласно инструкции
  • Ознакомьтесь с инструкцией Запуск SikuliX из командной строки
  • Укажите через path путь к каталогу с runsikulix(.cmd);
  • Разрабатывайте свои Sikuli-скрипты с помощью SikuiliX IDE, либо используйте имеющиеся
  • Выполнение скрипта в реализации шага вызывайте через Ванесса.ВыполнитьSikuliСкрипт()

17. Как получить отчет Allure у себя на компьютере под Windows?

  • Cкачать дистрибутив 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. Например, так: bsl ВанессаСервер = Новый(Тип("ВнешняяОбработкаОбъект.VAnessaAutomation")); ВанессаСервер.ПроверитьИстину(ПроверяемоеЗначение);

20. Не срабатывает шаг И я нажимаю на кнопку выбора у поля "ИмяПоля"

  • Такие шаги сначала пытаются активизировать поле, а затем нажимают на кнопку выбора у поля
  • Если у поля назначен обработчик при активизации поля, то шаг может не сработать и его надо заменить на шаг активизации поля

21. Как сделать в подсценарии необязательный параметр?

  • Вот пример когда в сценарии объявлен параметр ДопПараметр, и он является необязательным
  • Далее переданное значение сохраняется в параметр ЗначениеПараметра, и затем идёт проверка его значения

22. Как запустить тесты в браузере?

  • Опубликовать базу
  • Задать любое имя подключения
  • Указать тип подключения WEB
  • В строке соединения указать правильную ссылку, которая начинается на http или ws.
  • Для файловой базы надо указать порт web сервера (обычно это 1538). Для серверной базы надо указать имя сервера и порт кластера (обычно 1541)
  • Т.е. TestManager общается с браузером либо через веб сервер для файловых баз, либо через сервер кластера для серверных баз.

23. Как запомнить навигационную ссылку?

  • Для всех окон Gherkin И я сохраняю навигационную ссылку текущего окна в переменную "ИмяПеременной"
  • (Устарело) Также можно использовать внешнюю компоненту, например, так: Gherkin И я закрываю все окна клиентского приложения И В командном интерфейсе я выбираю 'Основная' 'Справочник1' Тогда открылось окно 'Справочник1' И в таблице "Список" я выбираю текущую строку И я нажимаю сочетание клавиш "Ctrl+F11" И я нажимаю на кнопку с именем "BtnCopy" И я жду закрытия окна "Получение ссылки" в течение 20 секунд И Я запоминаю значение выражения 'Ванесса.БуферОбмена.Текст' в переменную "НавСсылка"

24. Как отключить появление окна, при падении в дамп процесса 1С на Windows?

  • Нужно в реестре установить значения параметров
    • DontShowUI text Ключ: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting Имя: DontShowUI Значение: 1 Тип: dword
    • ShutdownReasonOn text Ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonOn Значение: 0 Тип: dword
    • ShutdownReasonUI text Ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Reliability Имя: ShutdownReasonUI Значение: 0 Тип: dword

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

  • Надо в каталоге 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>
  • Для проверки формирования дампов достаточно создать обработку с бесконечным рекурсивным вызовом: ```bsl &НаКлиенте Процедура ВызватьПроцедуру() ВызватьПроцедуру(); КонецПроцедуры

    &НаКлиенте Процедура ПриОткрытии(Отказ) ВызватьПроцедуру(); КонецПроцедуры ```

26. Как сделать из обычного шага шаг-условие?

  • Обязательно использовать ключевое слово Если (If для английского языка), в конце шага добавить слово Тогда (Then для английского языка): Gherkin #Обычный шаг И я нажимаю на кнопку с именем "ИмяКнопки" #Обычный шаг стал шагом-условием Если И я нажимаю на кнопку с именем "ИмяКнопки" Тогда

27. Как при запуске тестов на CI сервере отключить инициализацию редактора в процедуре ПриСозданииНаСервере()?

  • Для этого надо в базе, где запускается Vanessa Automation добавить константу Инициализировать VanessaEditor, тип Булево и установить её в Ложь

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

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

29. Как передавать сложные строки через переменные для использования во встроенном языке?

  • Примеры: ```Gherkin # Первый вариант И я запоминаю содержимое файла "C:\Temp\Untitled-2.xml" в переменную "ИмяПеременной1" И я выполняю код встроенного языка на сервере """bsl Сообщить("$ИмяПеременной1$"); """
    # Второй вариант
    И я запоминаю содержимое файла "C:\Temp\Untitled-2.xml" в переменную "ИмяПеременной"
    
    # Сохраняем значение переменной в специальный реквизит Объекта. Код выполняется на клиенте.
    И я выполняю код встроенного языка
    """bsl
        Ванесса.Объект.ЗначениеНаСервере = Контекст.ИмяПеременной;
    """
    
    # Используем переданное значение в серверном коде. Код выполняется на сервере.
    И я выполняю код встроенного языка на сервере
    """bsl
        Сообщить(Объект.ЗначениеНаСервере);
        Объект.ЗначениеНаСервере = "Новое значение";
    """
    
    # Возвращаем в переменную значение, обновленное в контексте сервера. Код выполняется на клиенте.
    И я выполняю код встроенного языка
    """bsl
        Контекст.ИмяПеременной = Ванесса.Объект.ЗначениеНаСервере;
    """
    

    ```

30. Для использования функционала UI Automation, при создании инструкций, откуда и как получать значения Имя, Тип и PID?

  • Надо установить windows sdk
  • Появится файл вида C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\inspect.exe - это инспектор объектов UI Automation
  • Альтернативный инспектор объектов

31. Как передать значение переменной с клиента на сервер, затем изменить значение на сервере и вернуть новое значение обратно в переменную?

  • Примеры: ```Gherkin # 1. Значение помещается в переменную И я запоминаю строку "НужнаяСтрока" в переменную "ИмяПеременной"

    2. Значение переменной помещается в Объект в специальный реквизит ЗначениеНаСервере

    И я выполняю код встроенного языка """bsl Ванесса.Объект.ЗначениеНаСервере = Контекст.ИмяПеременной; """

    3. Теперь значение переменной доступно на сервере. И там его можно изменить.

    И я выполняю код встроенного языка на сервере """bsl Сообщить(Объект.ЗначениеНаСервере); Объект.ЗначениеНаСервере = "Новое значение"; """

    4. Полученное значение помещается из Объекта в обычную переменную

    И я выполняю код встроенного языка """bsl Контекст.ИмяПеременной = Ванесса.Объект.ЗначениеНаСервере; """ ```

32. Какая Версия платформы и Режим совместимости должны использоваться для работы редактора VAEditor?

  • Версия платформы: 8.3.14 или выше
  • Режим совместимости: 8.3.7 или выше

33. Как правильно добавить новую настройку Vanessa Automaion?

  • Нужно добавить новый реквизит к объекту обработки Vanessa Automaion.
  • Прописать реквизит в Форма ОбщегоНазначенияVA -> КоллекцияКомандЗапуска() -> Форма УправляемаяФорма -> ИменаКлючейОбщихНастроек() -> Модуль объекта -> СтруктураОбщихНастроек()

34. Тест "Проверка, что для каждого элемента формы есть урок" выдаёт исключение об элементе формы, по которому не должно быть уроков

  • Тест надо добавить в исключения в методе ЭтотЭлементЯвляетсяИсключением(), который находится в features\Libraries\VB\step_definitions\ТестированиеVA.epf

35. Какой параметр отвечает за путь к Vanessa Automation при использовании утилиты vrunner?

  • Параметр --pathVanessa, где указан путь к обработке Vanessa-automation.epf или Vanessa-automation-single.epf

36. Альтернативные варианты установки внешней компоненты VanessaExt

  • Когда компонента ставится в каталог %APPDATA%\1C\1Cv8\ExtCompT в нём появляются определенные файлы, связаные с компонентой. Подробнее тут. Если эти файлы положить в этот катлог заранее, до запуска сеанса 1С, то компонента будет считаться установленной
  • Можно перед запуском тестов сделать дополнительный запуск VA, в котором будет выполнен сценарий УстановкаКомпонентыVanessaExt.feature. Этот сценарий запускает клиент тестирования, открывает в нём другой экземпляр VA и включает компоненту. После этого следующие запуски тестов будут считать, что компонента уже установлена

37. Какие шаги использовать для работы с меню Выбор из списка в 1С?

  • В платфоме есть два метода, чтобы показать пользователю выбор из списка (меню):
    • ПоказатьВыборИзСписка()
    • ПоказатьВыборИзМеню()
  • Визуально результат может не отличаться, но с точки зрения API автотестов это разные сущности
  • Для работы с Меню есть свои шаги: Gherkin И в меню формы я выбираю 'Пункт1'
  • Для работы со Cписком есть свои шаги: 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 Automation Gherkin И я устанавливаю флаг настройки `Vanessa Automation "ОтключатьДляПолейВозможностьЗатиранияТекстаПриСерверномВызове"
  • В этом случае при каждом вызове шага Тогда открылось окно будет изменяться свойство ОбновлениеТекстаРедактирования у полей текущей формы клиента тестирования
  • Также можно в Конфигураторе/EDT поставить полю свойство ОбновлениеТекстаРедактирования в значение ОбновлениеТекстаРедактирования.ПриИзмененииЗначения
  • Подробнее эта проблема описана тут пункт 7.7.4.2. Обновление отображаемых данных

42. Как прочитать Значение из Переменной среды?

  • Например, чтобы не хранить логины и пароли внутри сценария.
  • Для этого нужно прочитать значение из переменной среды в обычную переменную сценария Gherkin И Я запоминаю значение переменной среды 'MY_LOGIN' в переменную 'Логин' И в поле с именем 'Наименование' я ввожу текст "$Логин$"

43. Как программно определить в каком интерфейсе запущен сеанс 1С?

  • Пример: bsl КлиентскоеПриложение.ТекущийВариантИнтерфейса()

44. Как активизировать нужное окно, если в клиенте тестирования несколько окон с одинаковым заголовком?

  • Чтобы решить такую задачу, нужно самостоятельно устанавливать окнам клиента тестирования уникальный заголовок
  • Это можно сделать с помощью шага: Gherkin И я выполняю выражение '_ТекущееОкно.Заголовок = "МойЗаголовок"' в текущем окне (Расширение)

45. Как убрать окошко остановки выполнения сценария в верхней части экрана?

  • Для этого надо перейти в Сервис -> Выполнение сценариев -> Снять флаг Показывать окно остановки выполнения сценария