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

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

  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'