NvdaDevTestToolbox (Набор инструментов для разработки и тестирования NVDA)
Автор:- Исходный код дополнения: Посетить Web-сайт nvdaDevTestToolbox
Краткое описание
Дополнение NvdaDevTestToolbox добавляет набор инструментов для разработчиков и тестировщиков NVDA.
Особенности:
Улучшенный диалог перезагрузки для указания дополнительных параметров при перезапуске NVDA.
Различные функции, связанные с залогированными ошибками.
Исследователь свойств объектов.
Инструменты для работы со скриптами: расширенный режим описания скриптов и открыватель скриптов.
Команды для удобного чтения и анализа логов.
Резервные копии старых логов.
В рабочей области Python-консоли - функция для открытия исходного кода объекта.
Пользовательский стартовый скрипт для Python-консоли.
Команда для логирования трассировки стека функции speech.speak.
Команда для обратного перевода элементов интерфейса.
Подробнее о каждой функции и сочетаниях клавиш вы можете прочитать в руководстве к дополнению.
Основная информация
| Название | Версия | Совместимость с API NVDA | Последняя протестированная версия NVDA | Минимальная версия NVDA | Дата загрузки в каталог | Размер | Лицензия |
|---|---|---|---|---|---|---|---|
| nvdaDevTestToolbox | 9.0 | 2025.1 | 2025.3.2 | 2019.2 | 08-02-2026 17:29:49 | 316 Кб. | GPL v2 |
Журнал изменений
Подробнее
- Добавлена новая команда для открытия файла кода, когда курсор находится на пути/строке файла.
- Логирование вызовов функций (ранее известное как логирование стека) улучшено: теперь возможно логировать вызов любой функции и предоставлен более надёжный метод идентификации вызовов функций.
- Исправлена проблема безопасности в средстве чтения журналов (GHSA-39pg-6xpm-mjgf).
- Сообщения о звуковых сигналах ввода-вывода теперь корректно сообщаются в NVDA 2019.2.1.
- Команды чтения журналов больше не дают сбоев при чтении некоторых речевых команд (например, при использовании дополнения Console Toolkit).
- Исправлена проблема, когда в случае нескольких возможных обратных переводов в буфер обмена копировался последний пункт меню, независимо от фактически выбранного пункта.
- Подготовлена совместимость для NVDA 2026.1.
Скачать
NvdaDevTestToolbox-V.9.0.nvda-addon
⬇ Перейти к истории версий 🔝 Назад к оглавлениюИнформация о локализации на русский язык
🔝 Назад к оглавлениюРазделы
🔝 Назад к оглавлениюСправка
Подробнее
NVDA Dev & Test Toolbox (Набор инструментов для разработки и тестирования NVDA)
- Автор: Cyrille Bougot
- Совместимость с NVDA: 2019.2 и новее
- Скачать стабильную версию
Это дополнение собирает различные функции для отладки и тестирования NVDA.
Возможности
- Улучшенный диалог перезагрузки для указания дополнительных параметров при перезапуске NVDA.
- Различные функции, связанные с залогированными ошибками.
- Обозреватель свойств объекта.
- Инструменты для скриптов и исходного кода: расширенный режим описания скриптов и команды для открытия исходного кода.
- Команды для помощи в чтении и анализе логов.
- Резервные копии старых логов.
- Команда для анонимизации лога.
- Улучшения для консоли Python, такие как пользовательский стартовый скрипт и возможность сохранения истории ввода в памяти после перезапуска NVDA.
- В рабочей области консоли Python — функция для открытия исходного кода объекта.
- Команда для логирования вызовов определённой функции (например,
speech.speech.speak), включая её трассировку стека. - Команда для обратного перевода элементов интерфейса.
Команды
Это дополнение использует многоуровневые команды для всех новых команд, которые оно добавляет.
Точкой входа для этих команд является NVDA+X; таким образом, все команды должны выполняться с помощью NVDA+X, за которым следует другая одиночная буква или жест.
Вы можете вывести список всех доступных многоуровневых команд, нажав NVDA+X, H.
Для команд, которые вы используете чаще, вы также можете определить прямой жест в диалоге управления жестами.
Улучшенный диалог перезагрузки
Команда NVDA+X, Q открывает диалог для указания дополнительных параметров перед перезапуском NVDA.
Указываемые параметры соответствуют параметрам командной строки, которые можно использовать с nvda.exe, например, -c для пути к конфигурации, --disable-addons для отключения дополнений и т.д.
Функции, связанные с залогированными ошибками
Сообщить о последней залогированной ошибке
Нажатие NVDA+X, E позволяет сообщить о последней залогированной ошибке без необходимости открывать лог. Второе нажатие очищает запомненную последнюю ошибку.
Воспроизведение звука для залогированных ошибок
Настройка "Воспроизводить звук при ошибках в журнале" была введена в NVDA 2021.3 и позволяет указать, будет ли NVDA воспроизводить звук ошибки в случае, если ошибка залогирована.
Это дополнение предоставляет дополнительную команду (NVDA+X, shift+E) для переключения этой настройки.
Вы можете выбрать:
- "Только в тестовых версиях" (по умолчанию), чтобы NVDA воспроизводила звуки ошибок только если текущая версия NVDA является тестовой (альфа, бета или собрана из исходников).
- "Да", чтобы включить звуки ошибок независимо от вашей текущей версии NVDA.
Для NVDA версии ниже 2021.3 это дополнение предоставляет обратный порт этой функции и возможность управлять ею с помощью клавиатурной команды. Однако флажок на панели дополнительных настроек не портирован.
Обозреватель свойств объекта
Эта функция позволяет сообщать некоторые свойства текущего объекта навигации без открытия просмотрщика лога.
Чтобы вывести список свойств объекта, переместите на него объект навигации и используйте следующие команды:
NVDA+X, upArrow: Выбирает предыдущее свойство и сообщает его для объекта навигации.NVDA+X, downArrow: Выбирает следующее свойство и сообщает его для объекта навигации.NVDA+X, N: Сообщает выбранное в данный момент свойство для объекта навигации.NVDA+X, shift+N: Отображает выбранное в данный момент свойство для объекта навигации в просматриваемом сообщении.
Список поддерживаемых свойств следующий: name, role, state, value, windowClassName, windowControlID, windowHandle, location, Python class, Python class mro.
При использовании команд навигации по объектам вы также можете выбрать, чтобы сообщалось выбранное в данный момент свойство, вместо обычного сообщения NVDA об объекте.
Команда-переключатель NVDA+X, control+N позволяет переключаться между этим пользовательским сообщением об объектах и обычным сообщением NVDA.
Например, вы можете выбрать свойство "windowClassName" и включить пользовательское сообщение об объектах. Затем при перемещении объекта навигации к следующему или предыдущему объекту вы будете слышать windowClassName объекта вместо обычного сообщения.
Инструменты для скриптов и исходного кода
Команды для открытия исходного кода
Дополнение предоставляет три команды, позволяющие открыть исходный код.
Первая команда позволяет открыть исходный код скрипта, зная его жест.
Чтобы использовать её, нажмите NVDA+x, C, а затем жест скрипта, код которого вы хотите увидеть.
Например, чтобы увидеть код скрипта, который сообщает заголовок окна переднего плана, нажмите NVDA+X, C, а затем NVDA+T.
Две другие команды позволяют открыть исходный код по его пути:
NVDA+x, shift+Cоткрывает исходный код, путь к которому находится под системным курсором.NVDA+x, control+Cоткрывает исходный код, путь к которому находится под курсором обзора. Например, если курсор или курсор обзора находится на следующей строке, команда откроет соответствующий файл в вашем редакторе:C:\Users\username\AppData\Roaming\nvda\addons\addonName\globalPlugins\addonName\__init__.py:48
Для работы этих команд вам необходимо настроить команду вашего любимого редактора в настройках дополнения. Если вы не запускаете NVDA из исходников, также должна быть настроена расположение исходного кода NVDA.
Расширенный режим описания скриптов
Расширенный режим описания скриптов позволяет получать сообщаемую информацию о скриптах без описания в режиме справки по вводу.
Когда активен расширенный режим описания скриптов, режим справки по вводу (NVDA+1) изменяется следующим образом.
Если у скрипта нет описания, сообщаются имя и класс скрипта.
Если у скрипта есть описание, его описание сообщается как обычно.
Жест для активации или деактивации этой функции — NVDA+X, D.
Выполнение жеста, связанного со скриптом без описания в режиме справки по вводу, также создает запись для этого скрипта в диалоге управления жестами.
Эта запись находится в специальной категории под названием "Скрипты без описания (изменяйте на свой страх и риск!)".
Это позволяет легко добавлять, удалять или изменять нативные жесты NVDA для этих скриптов.
Однако имейте в виду, что часто предполагается, что у таких скриптов нет описания, чтобы пользователь не мог изменить связанный жест.
Действительно, жест может быть определен для соответствия сочетанию клавиш приложения.
Например, скрипт script_toggleItalic на NVDAObjects.window.winword.WordDocument связан с control+I, и это не следует изменять, поскольку жест передается приложению для фактического выполнения сочетания клавиш.
Пример использования
Control+shift+I также переключает курсив в Word, даже если это нативно не сообщается NVDA.
Чтобы результат control+shift+I сообщался NVDA как control+I, вы должны выполнить следующие шаги:
- Откройте документ Word.
- Включите расширенный режим описания скриптов с помощью
NVDA+X, D. - Войдите в режим справки по вводу с помощью NVDA+1.
- Нажмите
control+I, чтобы сообщить о скрипте курсива и добавить его в диалог жестов. - Выйдите из режима справки по вводу с помощью NVDA+1.
- Откройте диалог управления жестами.
- В категории "Скрипты без описания (изменяйте на свой страх и риск!)" выберите команду "toggleItalic на NVDAObjects.window.winword.WordDocument".
- Добавьте сочетание
control+shift+Iи подтвердите. - При желании выйдите из расширенного режима описания скриптов с помощью
NVDA+X, D.
Известная ошибка: Скрипт, добавленный для конкретного класса, виден, даже если диспетчер жестов открыт в другом контексте.
Функции чтения и анализа логов
Размещение маркеров в логе
Во время тестирования или работы вам может понадобиться отметить определенный момент в логе, чтобы позже легко вернуться к нему при чтении лога.
Чтобы добавить маркирующее сообщение в лог, нажмите NVDA+X, K.
Сообщение следующего вида будет залогировано на уровне INFO:
-- NDTT marker 0 --
Вы можете добавить столько маркеров, сколько хотите, в лог.
Номер маркера будет увеличиваться каждый раз, когда вы размещаете маркер в логе; он сбрасывается только при перезапуске NVDA.
Режим чтения логов
Режим чтения логов предоставляет команды для облегчения чтения и анализа логов.
В окне просмотрщика лога и в области вывода консоли Python режим чтения логов включен по умолчанию, поэтому команды чтения логов доступны сразу.
В другой области чтения текста, такой как редактор (например, Notepad++) или веб-страница (например, проблема на GitHub), вам нужно нажать NVDA+X, L, чтобы включить режим чтения логов и использовать его команды.
Когда вы закончите с задачами чтения и анализа логов, вы можете снова отключить NVDA+X, L, чтобы выключить режим чтения логов.
Команды, доступные в режиме чтения логов, описаны далее.
В этом режиме вы также можете нажать control+H, чтобы отобразить все доступные команды.
Команды быстрой навигации
Однобуквенные команды, аналогичные клавишам быстрой навигации в режиме просмотра, позволяют переходить к различным типам сообщений лога:
- m: любое сообщение
- e: сообщения об ошибках (
ERRORиCRITICAL) - w: предупреждающие сообщения (
WARNING) - f: информационные сообщения (
INFO) - k: маркеры, ранее размещенные в логе
- g: отладочные предупреждения (
DEBUGWARNING) - i: сообщения ввода/вывода (
IO) - n: сообщения ввода
- s: речевые сообщения
- b: сообщения брайля
- d: отладочные сообщения (
DEBUG)
Нажатие одной буквы перемещает к следующему вхождению этого сообщения. Сочетание буквы с клавишей shift перемещает к предыдущему вхождению этого сообщения.
Кроме того, внутри определенных типов сообщений вы можете перепрыгивать блоками, нажимая O или shift+O.
Поддерживаются следующие типы сообщений и связанные с ними блоки:
- В сообщениях, содержащих трассировки стека (например, сообщения об ошибках), навигация по блокам позволяет перепрыгивать между трассировками стека. Это особенно полезно, когда присутствует более одной трассировки стека, например, когда ошибка возникает в части "except" предложения try/except.
- В сообщении, перечисляющем стеки для потоков Python, залогированные при зависании, навигация по блокам позволяет перепрыгивать между стеками потоков.
- В сообщении, предоставляющем информацию для разработчика об объекте навигации, залогированном при нажатии
NVDA+F1, навигация по блокам позволяет перепрыгивать между группами свойств. Существует четыре группы свойств: общие свойства, свойства модуля приложения, свойства окна и свойства, специфичные для интерфейса (IAccessible, UIA).
Наконец, внутри блока вам может понадобиться быстро перейти к первой или последней интересующей строке блока.
Используйте shift+L, чтобы перейти к первой интересующей строке содержимого текущего блока, например, к первому фрейму трассировки стека.
И L, чтобы перейти к последней интересующей строке содержимого блока, например, к последнему фрейму стека потока или ошибке под трассировкой стека.
Перевод речевых сообщений
Иногда вам может понадобиться просмотреть лог, снятый на системе с иностранным языком, который вы не понимаете. Например, лог был снят на китайской системе / NVDA, а вы понимаете только французский. Если у вас установлено дополнение Instant Translate, вы можете использовать его в сочетании с командами быстрой навигации по логам, чтобы переводить речевые сообщения.
- Сначала настройте языки в Instant Translate. Исходный язык должен быть языком системы, на которой был снят лог (например, китайский). Целевой язык должен быть вашим языком (например, французский).
- Откройте лог
- Нажмите
control+T, чтобы включить автоматический перевод речи в логе - Используйте команды быстрой навигации в логе, например, S, I и т.д. При каждом обнаружении речевого сообщения оно будет произнесено на вашем языке (французском в нашем предыдущем примере)
Если вы хотите отключить перевод речи, снова нажмите control+T.
Открытие файла исходного кода в вашем редакторе
В логе некоторые строки могут ссылаться на исходный код:
- Строка, принадлежащая трассировке стека, содержит путь и строку в файле, например:
File "virtualBuffers\__init__.pyc", line 226, in _getStoryLength - Заголовочная строка залогированного сообщения содержит функцию, которая залогировала это сообщение, например:
INFO - config.ConfigManager._loadConfig (22:45:26.145) - MainThread (16580): - Содержимое сообщения, залогированного в режиме справки по вводу (залогировано на уровне info):
Input help: gesture kb(desktop):NVDA+t, bound to script title on globalCommands.GlobalCommands
Вам может понадобиться открыть файл, содержащий этот код, чтобы понять контекст трассировки стека или залогированного сообщения. Просто нажмите C, чтобы открыть этот файл.
Для работы этой функции вам необходимо настроить команду вашего любимого редактора в настройках дополнения. Если вы не запускаете NVDA из исходников, также должна быть настроена расположение исходного кода NVDA.
Анализ трассировки стека
Иногда в логе могут быть трассировки стека ошибок, как в следующем примере:
ERROR - scriptHandler.executeScript (14:47:43.426) - MainThread (15492):
error executing script: <bound method LogContainer.script_openSourceFile of <NVDAObjects.Dynamic_LogViewerLogContainerIAccessibleRichEdit50WindowNVDAObject object at 0x34C1E510>> with gesture 'c'
Traceback (most recent call last):
File "scriptHandler.pyc", line 300, in executeScript
File "C:\Users\myUserName\AppData\Roaming\nvda\addons\nvdaDevTestToolbox\globalPlugins\ndtt\logReader.py", line 603, in script_openSourceFile
if self.openStackTraceLine(line):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\myUserName\AppData\Roaming\nvda\addons\nvdaDevTestToolbox\globalPlugins\ndtt\logReader.py", line 667, in openStackTraceLine
0 / 0 # An erroneaous code line
~~^~~
ZeroDivisionError: division by zero
Для фреймов, где доступен исходный код, вы могли заметить маркеры с символами ^ (каретка) и ~ (тильда).
Таким образом Python визуально указывает местоположение ошибки, а также её контекст во фрейме трассировки стека.
Нажатие control+E перемещает курсор в начало ошибки в строке исходного кода, т.е. к тексту, отмеченному символом ^ (каретка).
Двойное нажатие выделяет этот текст.
Тройное нажатие выделяет ошибку вместе с её контекстом, т.е. текст строки исходного кода, отмеченный символами ^ (каретка) и ~ (тильда).
Обратите внимание, что для логов, снятых с версией NVDA до 2024.1, то есть с Python 3.7 или старше, Python указывает ошибку только одним символом ^ (каретка).
Таким образом, двойное или тройное нажатие этой команды становится довольно бесполезным.
Получение сводки доступных команд
Чтобы отобразить список всех доступных команд в режиме чтения лога, нажмите control+H.
Анонимизация лога
При сообщении о проблемах вам, возможно, придется предоставить лог. Однако логи могут содержать конфиденциальную информацию (имена пользователей, адреса электронной почты и т.д.). Это дополнение предоставляет команду для анонимизации содержимого лога.
Выберите часть лога или все его содержимое и нажмите NVDA+X, A.
Анонимизированное содержимое лога будет помещено в буфер обмена.
Вы можете вставить его на текущее выделение, чтобы заменить его, или в любое другое место.
Для работы этой функции вам необходимо настроить правила анонимизации, используемые этой командой.
Файл для настройки этих правил находится по адресу: pathToNVDAConfig\ndtt\anonymizationRules.dic (например, C:\Users\myUserName\AppData\Roaming\nvda\ndtt\consoleStartup.py).
Вы найдете все инструкции для написания этого файла в его заголовке.
В случае, если вы повредили файл правил анонимизации или удалили инструкции в заголовке, просто удалите или переименуйте этот файл, и новая версия этого файла будет создана при следующем запуске.
Резервное копирование старых логов
NVDA уже предоставляет резервную копию лога предыдущего сеанса NVDA; файл называется nvda-old.log.
Однако иногда вам может понадобиться доступ к более старым логам, например, потому что вам пришлось снова перезапустить NVDA, прежде чем просмотреть nvda-old.log.
Это дополнение позволяет настроить, хотите ли вы создавать резервные копии старых логов и сколько их; это делается в настройках дополнения.
Диалог менеджера логов позволяет просматривать сохраненные резервные копии логов. Его можно открыть, перейдя в меню NVDA -> Сервис -> Менеджер логов. В этом диалоге вы можете увидеть список всех резервных копий логов и выполнить различные действия с выбранным логом:
- открыть его (нажмите
Enter) - удалить его (нажмите
Delete) - скопировать файл лога (нажмите
control+C)
Вы также можете выбрать несколько логов для выполнения действия над всеми ими.
Чтобы иметь возможность открыть лог, вы должны сначала настроить Команду для открытия файла в вашем любимом редакторе.
Расширение консоли Python
Функция openCodeFile
В консоли вы можете вызвать следующую функцию, чтобы просмотреть исходный код, определяющий переменную myVar:
openCodeFile(myVar)
Для работы этой функции вам необходимо настроить команду вашего любимого редактора в настройках дополнения. Если вы не запускаете NVDA из исходников, также должна быть настроена расположение исходного кода NVDA.
Функция openCodeFile может быть вызвана для объектов, определенных в коде NVDA, или для объектов, определенных дополнениями.
Она не может быть вызвана для объектов, исходный код которых недоступен, таких как встроенные объекты Python.
Если вы еще не импортировали объект в консоль, вы также можете передать его имя в качестве параметра функции openCodeFile.
Ниже приведены примеры вызова для кода NVDA:
- Просмотр определения функции
speech.speech.speak:openCodeFile(speech.speech.speak)или с передачей имени в качестве параметра:openCodeFile("speech.speech.speak") - Просмотр определения класса
TextInfo:openCodeFile(textInfos.TextInfo) - Просмотр определения метода
copyToClipboardклассаTextInfo:openCodeFile(textInfos.TextInfo.copyToClipboard) - Просмотр определения класса текущего объекта в фокусе:
openCodeFile(focus) - Открытие файла
api.py, определяющего модульapi:openCodeFile(api)
Стартовый скрипт консоли Python
Вы можете определить пользовательский скрипт, который будет выполняться в пространстве имен консоли Python при её первом открытии.
Например, скрипт позволяет выполнять новые импорты и определять псевдонимы, которые вы сможете использовать непосредственно в консоли, как показано ниже:
# Различные импорты, которые я хочу видеть в консоли.
import globalVars as gv
import core
import ui
# Псевдонимы
ocf = openCodeFile
Скрипт для консоли Python должен быть размещен в следующем месте: pathToNVDAConfig\ndtt\consoleStartup.py
Например: C:\Users\myUserName\AppData\Roaming\nvda\ndtt\consoleStartup.py
Примечание: В Python 2, т.е. в NVDA 2019.2.1 или более ранней, поддерживаются только скрипты в чистой кодировке ASCII; любая другая кодировка, например, Unicode, не поддерживается.
Сохранение истории ввода консоли Python
В истории консоли Python вы можете использовать стрелки вверх и вниз для просмотра и редактирования предыдущих вводов. Однако список предыдущих вводов очищается при выходе из NVDA. Это дополнение предоставляет опцию, включенную по умолчанию, позволяющую сохранять историю ввода консоли Python даже при перезапуске NVDA.
Логирование вызовов функций
Иногда вам может понадобиться увидеть, какая часть кода отвечает за озвучивание чего-либо.
Для этого вы можете включить логирование вызовов функции speech.speech.speak, нажав NVDA+X, S.
Каждый раз, когда NVDA что-то произносит, соответствующее сообщение будет залогировано, включая трассировку стека, что позволит вам идентифицировать код, вызвавший этот речевой вывод.
Когда вы закончите, отключите логирование вызовов функций тем же жестом.
Таким же образом вы можете выбрать логирование вызовов функций вывода tones.beep, braille.BrailleBuffer.update или nvwave.playWaveFile, чтобы отследить происхождение звукового сигнала, вывода брайля или звука (например, звука орфографической ошибки).
Целевая функция может быть выбрана в параметрах дополнения.
Вы даже можете логировать стек вызовов пользовательской функции.
По умолчанию логирование вызовов функций выполняется с использованием метода "settrace": он использует sys.settrace, threading.settrace и/или threading.settrace_all_threads для установки обратного вызова трассировки, который вызывается при событии возврата из целевой функции.
В качестве альтернативы, если вы не получаете удовлетворительных результатов, вы можете выбрать метод "monkey patching", при котором патчится сама целевая функция (например, speech.speech.speak).
Оба метода имеют ограничения, которые могут помешать логированию вызовов функций в определенных комбинированных условиях.
Например, метод "settrace" может не работать с версиями NVDA ниже 2026.1, когда целевая функция выполняется из потока, отличного от основного, и логирование вызовов функций включается после запуска потока целевой функции.
С другой стороны, метод "monkey patching" может не работать, когда целевая функция импортируется через оператор from import (например, from tones import beep).
Вы можете переключать метод, используемый для логирования вызовов функций, в соответствующей настройке или нажатием NVDA+X, shift+S.
Команда обратного перевода
Многие тестировщики используют NVDA на другом языке, кроме английского. Но при сообщении результатов тестирования на GitHub описания измененных опций или сообщения, озвученные NVDA, должны быть написаны на английском. Довольно утомительно и отнимает много времени перезапускать NVDA на английском, чтобы проверить точную формулировку опций или сообщений.
Чтобы избежать этого, дополнение предоставляет две команды обратного перевода, позволяющие обратно перевести интерфейс NVDA, такие как сообщения, метки элементов управления в графическом интерфейсе и т.д.
NVDA+X, Rиспользует gettext-перевод NVDA, чтобы попытаться обратно перевести последнюю речь.NVDA+X, shift+Rиспользует gettext-переводы из NVDA и его дополнений, чтобы попытаться обратно перевести последнюю речь.
Более конкретно, обратно переводится первая строка последней речевой последовательности.
Например, во французской NVDA, если я нажму стрелку вниз на меню "Сервис" (фр. "Outils"), NVDA произнесет "Outils sous-Menu o", что означает "Tools subMenu o". Если я нажму команду обратного перевода сразу после этого, NVDA обратно переведет "Outils" в "Tools".
Посмотрев в лог позже, мы можем найти следующие строки:
Для фреймов, где доступен исходный код, вы могли заметить маркеры с символами `^` (каретка) и `~` (тильда).
Таким образом Python визуально указывает местоположение ошибки, а также её контекст во фрейме трассировки стека.
Нажатие `control+E` перемещает курсор в начало ошибки в строке исходного кода, т.е. к тексту, отмеченному символом `^` (каретка).
Двойное нажатие выделяет этот текст.
Тройное нажатие выделяет ошибку вместе с её контекстом, т.е. текст строки исходного кода, отмеченный символами `^` (каретка) и `~` (тильда).
Обратите внимание, что для логов, снятых с версией NVDA до 2024.1, то есть с Python 3.7 или старше, Python указывает ошибку только одним символом `^` (каретка).
Таким образом, двойное или тройное нажатие этой команды становится довольно бесполезным.
#### Получение сводки доступных команд
Чтобы отобразить список всех доступных команд в режиме чтения лога, нажмите `control+H`.
## Анонимизация лога
При сообщении о проблемах вам, возможно, придется предоставить лог.
Однако логи могут содержать конфиденциальную информацию (имена пользователей, адреса электронной почты и т.д.).
Это дополнение предоставляет команду для анонимизации содержимого лога.
Выберите часть лога или все его содержимое и нажмите `NVDA+X, A`.
Анонимизированное содержимое лога будет помещено в буфер обмена.
Вы можете вставить его на текущее выделение, чтобы заменить его, или в любое другое место.
Для работы этой функции вам необходимо настроить правила анонимизации, используемые этой командой.
Файл для настройки этих правил находится по адресу: `pathToNVDAConfig\ndtt\anonymizationRules.dic` (например, `C:\Users\myUserName\AppData\Roaming\nvda\ndtt\consoleStartup.py`).
Вы найдете все инструкции для написания этого файла в его заголовке.
В случае, если вы повредили файл правил анонимизации или удалили инструкции в заголовке, просто удалите или переименуйте этот файл, и новая версия этого файла будет создана при следующем запуске.
<a id="oldLogsBackup"></a>
## Резервное копирование старых логов
NVDA уже предоставляет резервную копию лога предыдущего сеанса NVDA; файл называется `nvda-old.log`.
Однако иногда вам может понадобиться доступ к более старым логам, например, потому что вам пришлось снова перезапустить NVDA, прежде чем просмотреть `nvda-old.log`.
Это дополнение позволяет настроить, хотите ли вы создавать резервные копии старых логов и сколько их; это делается в [настройках дополнения](#settingsLogsBackup).
Диалог менеджера логов позволяет просматривать сохраненные резервные копии логов.
Его можно открыть, перейдя в меню NVDA -> Сервис -> Менеджер логов.
В этом диалоге вы можете увидеть список всех резервных копий логов и выполнить различные действия с выбранным логом:
* открыть его (нажмите `Enter`)
* удалить его (нажмите `Delete`)
* скопировать файл лога (нажмите `control+C`)
Вы также можете выбрать несколько логов для выполнения действия над всеми ими.
Чтобы иметь возможность открыть лог, вы должны сначала настроить [Команду для открытия файла в вашем любимом редакторе](#settingsOpenCommand).
## Расширение консоли Python
<a id="pythonConsoleOpenCodeFile"></a>
### Функция `openCodeFile`
В консоли вы можете вызвать следующую функцию, чтобы просмотреть исходный код, определяющий переменную `myVar`:
`openCodeFile(myVar)`
Для работы этой функции вам необходимо настроить [команду вашего любимого редактора](#settingsOpenCommand) в настройках дополнения.
Если вы не запускаете NVDA из исходников, также должна быть настроена [расположение исходного кода NVDA](#settingsNvdaSourcePath).
Функция `openCodeFile` может быть вызвана для объектов, определенных в коде NVDA, или для объектов, определенных дополнениями.
Она не может быть вызвана для объектов, исходный код которых недоступен, таких как встроенные объекты Python.
Если вы еще не импортировали объект в консоль, вы также можете передать его имя в качестве параметра функции `openCodeFile`.
Ниже приведены примеры вызова для кода NVDA:
* Просмотр определения функции `speech.speech.speak`:
`openCodeFile(speech.speech.speak)`
или с передачей имени в качестве параметра:
`openCodeFile("speech.speech.speak")`
* Просмотр определения класса `TextInfo`:
`openCodeFile(textInfos.TextInfo)`
* Просмотр определения метода `copyToClipboard` класса `TextInfo`:
`openCodeFile(textInfos.TextInfo.copyToClipboard)`
* Просмотр определения класса текущего объекта в фокусе:
`openCodeFile(focus)`
* Открытие файла `api.py`, определяющего модуль `api`:
`openCodeFile(api)`
### Стартовый скрипт консоли Python
Вы можете определить пользовательский скрипт, который будет выполняться в пространстве имен консоли Python при её первом открытии.
Например, скрипт позволяет выполнять новые импорты и определять псевдонимы, которые вы сможете использовать непосредственно в консоли, как показано ниже:
# Различные импорты, которые я хочу видеть в консоли.
import globalVars as gv
import core
import ui
# Псевдонимы
ocf = openCodeFile
Скрипт для консоли Python должен быть размещен в следующем месте: `pathToNVDAConfig\ndtt\consoleStartup.py`
Например: `C:\Users\myUserName\AppData\Roaming\nvda\ndtt\consoleStartup.py`
Примечание: В Python 2, т.е. в NVDA 2019.2.1 или более ранней, поддерживаются только скрипты в чистой кодировке ASCII; любая другая кодировка, например, Unicode, не поддерживается.
### Сохранение истории ввода консоли Python
В истории консоли Python вы можете использовать стрелки вверх и вниз для просмотра и редактирования предыдущих вводов.
Однако список предыдущих вводов очищается при выходе из NVDA.
Это дополнение предоставляет [опцию](#settingsPreserveHistory), включенную по умолчанию, позволяющую сохранять историю ввода консоли Python даже при перезапуске NVDA.
<a id="loggingFunctionCall"></a>
## Логирование вызовов функций
Иногда вам может понадобиться увидеть, какая часть кода отвечает за озвучивание чего-либо.
Для этого вы можете включить логирование вызовов функции `speech.speech.speak`, нажав `NVDA+X, S`.
Каждый раз, когда NVDA что-то произносит, соответствующее сообщение будет залогировано, включая трассировку стека, что позволит вам идентифицировать код, вызвавший этот речевой вывод.
Когда вы закончите, отключите логирование вызовов функций тем же жестом.
Таким же образом вы можете выбрать логирование вызовов функций вывода `tones.beep`, `braille.BrailleBuffer.update` или `nvwave.playWaveFile`, чтобы отследить происхождение звукового сигнала, вывода брайля или звука (например, звука орфографической ошибки).
[Целевая функция](#targetFunctionForCallLogSetting) может быть выбрана в параметрах дополнения.
Вы даже можете логировать стек вызовов пользовательской функции.
По умолчанию логирование вызовов функций выполняется с использованием метода "settrace": он использует `sys.settrace`, `threading.settrace` и/или `threading.settrace_all_threads` для установки обратного вызова трассировки, который вызывается при событии возврата из целевой функции.
В качестве альтернативы, если вы не получаете удовлетворительных результатов, вы можете выбрать метод "monkey patching", при котором патчится сама целевая функция (например, `speech.speech.speak`).
Оба метода имеют ограничения, которые могут помешать логированию вызовов функций в определенных комбинированных условиях.
Например, метод "settrace" может не работать с версиями NVDA ниже 2026.1, когда целевая функция выполняется из потока, отличного от основного, и логирование вызовов функций включается после запуска потока целевой функции.
С другой стороны, метод "monkey patching" может не работать, когда целевая функция импортируется через оператор from import (например, `from tones import beep`).
Вы можете переключать метод, используемый для логирования вызовов функций, в [соответствующей настройке](#functionCallLogMethodSetting) или нажатием `NVDA+X, shift+S`.
<a id="reverseTranslationCommand"></a>
## Команда обратного перевода
Многие тестировщики используют NVDA на другом языке, кроме английского.
Но при сообщении результатов тестирования на GitHub описания измененных опций или сообщения, озвученные NVDA, должны быть написаны на английском.
Довольно утомительно и отнимает много времени перезапускать NVDA на английском, чтобы проверить точную формулировку опций или сообщений.
Чтобы избежать этого, дополнение предоставляет две команды обратного перевода, позволяющие обратно перевести интерфейс NVDA, такие как сообщения, метки элементов управления в графическом интерфейсе и т.д.
* `NVDA+X, R` использует gettext-перевод NVDA, чтобы попытаться обратно перевести последнюю речь.
* `NVDA+X, shift+R` использует gettext-переводы из NVDA и его дополнений, чтобы попытаться обратно перевести последнюю речь.
Более конкретно, обратно переводится первая строка последней речевой последовательности.
Например, во французской NVDA, если я нажму стрелку вниз на меню "Сервис" (фр. "Outils"), NVDA произнесет "Outils sous-Menu o", что означает "Tools subMenu o".
Если я нажму команду обратного перевода сразу после этого, NVDA обратно переведет "Outils" в "Tools".
Посмотрев в лог позже, мы можем найти следующие строки:
Это подтверждает, что "Outils" была первой строкой в речевой последовательности.
В случае, если обратный перевод приводит к двум или более возможным результатам, открывается контекстное меню со списком всех возможностей.
Результат обратного перевода также копируется в буфер обмена, если включена соответствующая опция, что является значением по умолчанию.
Обратный перевод строк NVDA доступен только для версии NVDA 2022.1 или выше. Для более ранних версий NVDA доступны только строки дополнений для обратного перевода.
Кроме того, в версии NVDA 2019.2.1 или более ранней, в случае, если обратный перевод не найден, делается вторая попытка в первой части строки. Действительно, в этих версиях NVDA речевая последовательность выглядит так:
IO - speech.speak (12:39:12.684):
Speaking [u'Outils sous-Menu o']
Мы видим, что метка объекта может быть объединена с ролью, состоянием, сочетанием клавиш и т.д. Поэтому, если обратный перевод не дает результата для всей строки, делается вторая попытка для части строки перед двойным пробелом (" "). Однако это не является надежным, поскольку мы не можем исключить, что строка изначально содержит двойной пробел.
Настройки
Некоторые функции дополнения могут требовать специальной конфигурации. Панель настроек позволяет включать их или управлять их работой. Чтобы просмотреть и изменить эти настройки, перейдите в меню NVDA -> Параметры и выберите категорию NVDA Dev & Test Toolbox. Этот диалог настроек также можно открыть непосредственно из диалога Менеджера логов.
Эти настройки являются глобальными и могут быть настроены только при активном профиле по умолчанию.
Команда для открытия файла в вашем любимом редакторе
Некоторые функции позволяют просматривать содержимое в вашем любимом редакторе. К ним относятся команды для просмотра исходного файла из лога, из объекта в консоли или из введенного жеста, а также кнопка "Открыть" в менеджере логов.
Чтобы использовать их, вам сначала нужно настроить команду, которая будет вызываться для открытия файла в вашем любимом редакторе.
Команда должна иметь вид:
"C:\путь\к\моему\редактору\editor.exe" "{path}":{line}
Вы, конечно, должны изменить эту строку в соответствии с реальным именем и расположением вашего редактора и синтаксисом, используемым им для открытия файлов.
{path} будет заменен полным путем к файлу для открытия, а {line} — номером строки, на которую вы хотите установить курсор.
Например, для Notepad++ команда, которую нужно ввести, будет:
"C:\Program Files\Notepad++\notepad++.exe" "{path}" -n{line}
Путь к исходному коду NVDA
При использовании команды для просмотра исходного файла из лога, из объекта в консоли или из жеста или пути файл может принадлежать самому NVDA.
Если вы не запускаете NVDA из исходников, ваша NVDA содержит только скомпилированные файлы.
Таким образом, вы можете указать здесь альтернативное расположение, где будет найден соответствующий исходный файл, например, место, куда вы склонировали исходные файлы NVDA, чтобы исходный файл все равно можно было открыть.
Путь должен быть таким:
C:\pathExample\GIT\nvda\source
Конечно, замените путь к исходному коду NVDA на правильный.
Однако убедитесь, что версия вашего исходного файла (например, коммит GIT) совпадает с версией запущенного экземпляра NVDA.
Резервное копирование старых логов
Раскрывающийся список "Резервное копирование старых логов" позволяет включить или отключить функцию. Если она включена, вы также можете указать ниже в "Ограничить количество резервных копий" максимальное количество резервных копий, которые вы хотите сохранить. Эти настройки вступают в силу только при следующем запуске NVDA, когда происходит резервное копирование.
Копировать результат обратного перевода в буфер обмена
Эта опция позволяет выбрать, будет ли команда обратного перевода также копировать свой результат в буфер обмена.
Сохранять историю ввода консоли после перезапуска
Если этот флажок установлен, история ввода консоли Python будет сохраняться при перезапуске NVDA. Если он установлен, вы также можете указать ниже максимальное количество вводов, которые будут сохранены. Если он не установлен, NVDA будет вести себя как обычно, т.е. история консоли будет пустой после перезапуска.
Целевая функция для логирования вызовов
Этот раскрывающийся список определяет функцию, вызовы которой будут логироваться при включении логирования вызовов функций. Вы можете выбрать функцию среди различных функций вывода или выбрать вариант пользовательской функции.
Если вы выберете вариант пользовательской функции, вам нужно будет ввести полное имя функции, вызовы которой вы хотите логировать.
Это полное имя должно включать её местоположение (пакет, модуль, класс и т.д.).
Будьте внимательны, определяйте функцию с её исходным местоположением, т.е. там, где она была фактически определена, иначе логирование вызовов с меньшей вероятностью будет работать.
Например, используйте speech.speech.getCurrentLanguage, которая указывает на функцию, определенную в speech\speech.py, а не speech.getCurrentLanguage, которая указывает на символ, импортированный в speech\__init__.py.
Метод логирования вызовов функций
Этот раскрывающийся список определяет метод, используемый для идентификации вызовов функций при включении логирования вызовов функций.
Этот параметр также можно переключать нажатием NVDA+X, shift+S.
При изменении этого метода он сначала применится в следующий раз, когда будет активировано логирование вызовов функций; то есть он не применяется к текущему логированию вызовов функций, если оно в данный момент включено.
Журнал изменений
Версия 9.0
- Добавлена новая команда для открытия файла кода, когда курсор находится на пути/строке файла.
- Логирование вызовов функций (ранее известное как логирование стека) улучшено, предлагая возможность логировать вызов любой функции и предоставляя более надежный метод идентификации вызовов функций.
- Исправлена проблема безопасности в средстве чтения логов (GHSA-39pg-6xpm-mjgf).
- Сообщения о звуковых сигналах ввода-вывода теперь корректно сообщаются в NVDA 2019.2.1.
- Команды чтения логов больше не дают сбоев при чтении некоторых речевых команд (например, при использовании дополнения Console Toolkit).
- Исправлена проблема, когда в случае нескольких возможных обратных переводов последний пункт меню копировался в буфер обмена независимо от фактически выбранного пункта.
- Подготовлена совместимость для NVDA 2026.1.
Версия 8.0
- История консоли Python теперь может сохраняться после перезапусков.
- Обратный перевод: добавлена вторая команда для обратного перевода строки с использованием переводов как NVDA, так и его дополнений.
- Новые команды чтения логов для перехода к предыдущему или следующему сообщению вывода брайля.
- Новые команды чтения логов для перехода к предыдущему или следующему блоку в сообщении, например, к предыдущему или следующему стеку потока в отчете о зависании watchdog, предыдущему или следующему блоку свойств в информации для разработчика об объекте навигации и т.д.
- Новые команды чтения логов для перехода к первой или последней интересующей строке блока, например, к первому или последнему фрейму трассировки стека.
- Новая команда чтения логов "Перейти к ошибке" для перехода к ошибке во фрейме трассировки стека.
- Новая команда чтения логов для отображения справочного сообщения со списком всех доступных команд при чтении лога.
- Режим чтения логов теперь включен по умолчанию в области вывода консоли Python.
- Новая команда для анонимизации лога.
- Стартовый скрипт консоли теперь поддерживает строки Unicode (только для Python 3); однако полные файлы Unicode могут не поддерживаться.
- Стартовый скрипт консоли Python теперь будет выполняться только один раз и только при открытии консоли. Исправлена ошибка, когда этот скрипт мог выполняться много раз при перезагрузке дополнений.
- Улучшена обработка ошибок в стартовом скрипте консоли.
- Исправление: пустые файлы логов, создаваемые при отключенном логе, больше не вызывают сбоев при сохранении в качестве старого лога.
- Речь по запросу теперь поддерживается в многоуровневых командах.
- Улучшена обработка ошибок команды открытия скриптов (в случае неверной или отсутствующей конфигурации или при использовании дисплея Брайля).
Версия 7.3
- Исправление: команду для активации многоуровневых команд дополнения теперь можно назначить на другой жест.
Версия 7.1
- Совместимость с NVDA 2025.1.
Версия 7.0
- Введены многоуровневые команды; точка входа —
NVDA+X. Существующие команды были соответствующим образом изменены. - Новая команда (
NVDA+X, R) для обратного перевода последнего произнесенного сообщения. - Новая команда (
NVDA+X, C) для открытия исходного кода скрипта, связанного со следующим нажатым жестом. - Добавлена поддержка речи по запросу.
- Менеджер логов теперь позволяет выполнять больше действий, либо с помощью специальных кнопок в диалогах, либо с использованием сочетаний клавиш в списке:
enterдля открытия лога,control+Cдля копирования файла лога иdeleteдля удаления файла лога. - Порядок сортировки в менеджере логов изменен на обратный (самый последний лог сверху).
- Исправлена проблема при попытке открыть модуль Python с помощью функции openCodeFile.
Версия 6.3
- Совместимость с NVDA 2024.1.
Версия 6.2
- Восстановлено открытие консоли для NVDA < 2021.1.
- Устранены потенциальные проблемы безопасности, связанные с GHSA-xg6w-23rw-39r8, при использовании дополнения со старыми версиями NVDA. Однако рекомендуется использовать NVDA 2023.3.3 или выше.
Версия 6.1
- Теперь работает открытие исходного файла объекта, расположенного в подмодуле пакета.
- Исправление: улучшенный диалог выхода теперь можно снова открывать и использовать как ожидается после закрытия. (вклад от Łukasz Golonka)
Версия 6.0
- При использовании команд навигации по объектам можно сообщать определенное свойство объекта вместо обычного сообщения NVDA об объекте.
- В режиме чтения логов клавиша "C" для открытия файла кода из лога теперь также работает на сообщении справки по вводу.
- Исправление: дополнение теперь может успешно запускаться, когда количество сохраняемых логов установлено на максимальное значение.
- Исправление: вывод стартового скрипта консоли Python больше не мешает переходу к первому результату в консоли при использовании команд навигации по результатам.
- Примечание: отныне обновления локализации больше не будут появляться в журнале изменений.
Версия 5.0
- Если установлено дополнение Instant Translate, теперь возможно переводить речевые сообщения на лету при использовании команд чтения логов.
- В режиме чтения логов нажатие E или shift+E теперь переходит к сообщениям об ошибках CRITICAL, а также к обычным сообщениям ERROR.
- Добавлены новые команды быстрой навигации по логам для перехода к сообщениям ввода и речи.
- Новая команда позволяет размещать маркер в логе; и специальные команды быстрой навигации в режиме чтения логов позволяют переходить к ним. Автор идеи: первоначальная идея для этой функции принадлежит дополнению Debug Helper от Luke Davis.
- Исправление: запоминание последней ошибки больше не дает сбоев в некоторых случаях.
- Исправление: дополнение снова может инициализироваться с NVDA 2019.2.1.
- Исправление: функция сохранения логов больше не будет давать сбоев с логами, содержащими не-ASCII символы.
Версия 4.2
- Исправлена ошибка в версиях NVDA ниже 2021.3.
- Исправлено форматирование лога трассировки стека.
- Первые локализации.
Версия 4.1
- Исправлена ошибка, возникающая в некоторых ситуациях при логировании ошибки.
- Настройки дополнения теперь можно изменять только при активном профиле по умолчанию, чтобы избежать проблем с конфигурацией.
Версия 4.0
- Возможность резервного копирования старых логов и введение менеджера логов.
- Добавлен скрипт для сообщения о последней залогированной ошибке.
- Исправлена ошибка, препятствующая чтению последнего сообщения лога в старых версиях NVDA.
Версия 3.2
- Совместимость с NVDA 2023.1.
Версия 3.1
- Исправлена ошибка, возникающая при запросе недоступной информации об объекте.
Версия 3.0
- В логе вы теперь можете нажать C на заголовочной строке сообщения, чтобы открыть функцию/модуль, который его создал.
- В консоли функция
openCodeFileтеперь может принимать в качестве параметра объект или строку, содержащую его имя. - Новая функция: стартовый файл консоли NVDA: если он существует, файл YourNVDAConfigFolder\ndtt\consoleStartup.py будет выполнен при первом открытии консоли NVDA или при перезагрузке дополнений.
- Различные мелкие исправления для функции консоли Python
openCodeFileи команды для открытия исходного файла, соответствующего строке в логе. - Исправлена проблема при попытке сообщить роли/состояния для обозревателя объектов в старой версии NVDA.
- Дополнение больше не вызывает проблем с перехватчиком дерева при использовании UIA в Edge.
Версия 2.1
- Различные исправления ошибок и рефакторинг/очистка кода для обработки всех случаев использования: все поддерживаемые версии, установленная версия vs. запуск из исходников и т.д. (вклад от Łukasz Golonka)
- Переписывание модуля compa (вклад от Łukasz Golonka)
- Диалог перезагрузки теперь можно открыть только один раз.
- Сочетания клавиш для обозревателя объектов теперь не назначены по умолчанию и должны быть сопоставлены пользователем.
- В обозревателе объектов двойное нажатие для вызова скрипта сообщения о текущем свойстве объекта теперь отображает сообщаемую информацию в просматриваемом сообщении.
Версия 2.0
- Новая функция: улучшенный диалог перезагрузки для указания дополнительных параметров при перезапуске NVDA.
- Новая функция: расширенный режим описания.
- Функция воспроизведения звука ошибки унифицирована между версиями NVDA до и после 2021.3.
- Новая функция: команды чтения логов теперь доступны в просмотрщике лога, а также опционально в полях редактирования или на веб-страницах.
- Новая функция: в консоли Python доступна функция
openCodeFileдля просмотра исходного кода объекта. - Некоторые функции теперь отключены в безопасном режиме по соображениям безопасности.
- Диапазон совместимости дополнения расширен (с 2019.2 до 2021.1).
- Релизы теперь выполняются с помощью GitHub Actions вместо AppVeyor.
Версия 1.0
- Первый выпуск.