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

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

  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:

    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='

  8. На 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
    
  9. Как настроить сбор дампов на раннере?

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

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

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

    • Примеры:

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

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

  13. Если для запуска Vanessa Automation используется утилита vrunner, то нужно в файле настроек vrunner задавать параметр --pathvanessa, где указан путь к обработке vanessa-automation.epf или vanessa-automation-single.epf.
  14. Установка внешней компоненты 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 и включает компоненту. После этого следующие запуски тестов будут считать, что компонента уже установлена.
  15. В платфоме есть два метода, чтобы показать пользователю выбор из списка (меню) ПоказатьВыборИзСписка() ПоказатьВыборИзМеню() Визуально результат может не отличаться, но с точки зрения 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 Automation Gherkin И я устанавливаю флаг настройки 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. Как убрать окошко остановки выполнения сценария в верхней части экрана * Для этого надо перейти в Сервис -> Выполнение сценариев -> Снять флаг "Показывать окно остановки выполнения сценария"