NVDA Dev & Test Toolbox

Это дополнение объединяет различные функции для отладки и тестирования NVDA.

Возможности

  • Расширенный диалог перезапуска для указания некоторых дополнительных параметров при перезапуске NVDA.
  • Различные функции, связанные с зарегистрированными ошибками.
  • Обозреватель свойств объекта.
  • Script tools: an extended script description mode and a script opener.
  • Команды, помогающие считывать и анализировать журнал.
  • Резервные копии старых журналов
  • В рабочей области консоли Python есть функция для открытия исходного кода объекта.
  • Пользовательский скрипт запуска для консоли Python
  • Команда для регистрации трассировки стека функции speech.speak.
  • A command to reverse translate the items of the interface.

Commands

This add-on uses layered commands for all of the new commands it adds. The entry point for these commands is NVDA+X; thus all the commands should be executed by NVDA+X followed by another single letter or gesture. You can list all the available layered commands pressing NVDA+X, H.

For the commands that you use more frequently, you can also define a direct gesture in the input gesture dialog.

Расширенный диалог перезапуска

The NVDA+X, Q command opens a dialog to specify some extra options before restarting NVDA. The options that can be specified correspond to the command line options that can be used with nvda.exe, e.g. -c for config path, --disable-addons to disable add-ons, etc.

Функции, связанные с зарегистрированными ошибками

Сообщить о последней зарегистрированной ошибке

Pressing NVDA+X, E allows to report the last error logged without needing to open the log. A second press clears the memorized last error.

Воспроизведение звука при обнаружении зарегистрированных ошибок

Параметр "Воспроизводить звук при зарегистрированных ошибках" был введен в NVDA 2021.3 и позволяет указать, будет ли NVDA воспроизводить звук ошибки в случае регистрации ошибки.

This add-on provides an additional command (NVDA+X, shift+E) to toggle this setting. You can choose:

  • "Только в тестовых версиях" (по умолчанию), чтобы ошибка воспроизведения NVDA воспроизводилась только в том случае, если текущая версия NVDA является тестовой (альфа, бета-версия или запущена из исходного кода).
  • "Да", чтобы включить звуковые сигналы об ошибках, независимо от вашей текущей версии NVDA.

Для NVDA до 2021.3 это дополнение обеспечивает перенос этой функции и возможность управлять ею с помощью команд с клавиатуры. Однако флажок в панель дополнительных настроек не перенесён.

Обозреватель свойств объекта

Эта функция позволяет сообщать о некоторых свойствах текущего объекта навигатора, не открывая просмотрщик журнала.

Чтобы просмотреть свойства объекта, переместите к нему объект навигатора и используйте следующие команды:

  • NVDA+X, upArrow: Selects the previous property and reports it for the navigator object.
  • NVDA+X, downArrow: Selects the next property and reports it for the navigator object.
  • NVDA+X, N: Reports the currently selected property for the navigator object
  • NVDA+X, shift+N: Displays the currently selected property for the navigator object in a browseable message

Список поддерживаемых свойств следующий: имя, роль, состояние, значение, windowClassName, windowControlID, windowHandle, location, класс Python, класс Python mro.

When using object navigation commands, you can also choose to have the currently selected property reported instead of NVDA usual object reporting. A toggle command, NVDA+X, control+N, allows to switch between this custom reporting of objects and NVDA usual reporting.

Например, вы можете выбрать свойство "windowClassName" и включить создание объявлений по настраиваемым объектам. Тогда при перемещении объекта навигатора к следующему или предыдущему объекту вместо обычного сообщения вы услышите имя класса окна объекта.

Script tools

The script opener

The script opener command allows to open the code of a script knowing its gesture.

To use it press NVDA+x, C and then the gesture of the script which you want to see the code of. For example to see the code of the script that reports the title of the foreground window, press NVDA+X, C and then NVDA+T.

For this feature to work, you need to have configured your favorite editor's command in the add-on's settings. If you are not running NVDA from source, the location of NVDA source code should also have been configured.

Расширенный режим описания скрипта

The extended script description mode allows to have reported information on scripts without description in input help mode.

When the Extended script description mode is active, the input help mode (NVDA+1) is modified as follows. If a script has no description, the script's name and class are reported. If a script has a description, its description is reported as usual. The gesture to activate or deactivate this feature is NVDA+X, D.

Выполнение жеста, привязанного к сценарию без описания в режиме справки по вводу, также создаёт запись для этого скрипта в диалоге управления жестами. Эта запись находится в специальной категории "Скрипты без описания (изменяйте на свой страх и риск!)". Это позволяет легко добавлять, удалять или изменять собственные жесты NVDA для этих скриптов. Однако имейте в виду, что часто предполагается, что такой скрипт не содержит никакого описания, чтобы пользователь не мог изменить связанный жест. Действительно, жест может быть определён в соответствии с клавишей быстрого доступа приложения. Например, скрипт script_toggleItalic в NVDAObjects.window.winword.WordDocument привязан к control+I, и его не следует изменять, поскольку жест передаётся приложению для фактического выполнения сочетания клавиш.

Пример использования

Control+shift+I также переключает курсив в Word, даже если NVDA не сообщает об этом изначально. Чтобы NVDA сообщала о результате control+shift+I как control+I, вам необходимо выполнить следующие шаги:

  • Откройте документ Word.
  • Enable the extended script description mode with NVDA+X, D.
  • Войдите в режим справки по вводу с помощью NVDA+1.
  • Нажмите Control+I, чтобы сообщить о курсиве и добавить его в диалог жестов ввода.
  • Выйдите из режима справки по вводу с помощью NVDA+1.
  • Откройте диалог жестов ввода.
  • В категории "Скрипты без описания (изменяйте на свой страх и риск!)" выберите команду "toggleItalic в NVDAObjects.window.winword.WordDocument".
  • Добавьте сочетание клавиш control+shift+I и подтвердите.
  • If you want, exit the extended script description mode with NVDA+X, D.

Известная ошибка: скрипт, добавленный для определённого класса, виден, даже если диалог жестов ввода открыт в другом контексте.

Функции чтения и анализа журналов

Размещайте маркеры в журнале

While testing or working, you may want to mark a specific moment in the log, so that you can turn to it easily later when reading the log. To add a marker message in the log, press NVDA+X, K. A message as follows will be logged at INFO level:
-- NDTT marker 0 --
Вы можете добавить в журнал столько маркеров, сколько захотите. Номер маркера будет увеличиваться каждый раз, когда вы помещаете его в журнал; он будет сброшен только при перезапуске NVDA.

Режим чтения журналов

A log reader mode provides commands to ease log reading and analyzing. In the log viewer window the log reader is enabled by default, thus log reading commands are available immediately. In another text reading area such as an editor (e.g. Notepad++) or a webpage (e.g. GitHub issue), you need to press NVDA+X, L to enable log reader mode and use its commands. When you are done with log reading and analyzing tasks, you can disable again NVDA+X, L to disable the log reader mode.

Команды, доступные в режиме чтения журнала, описаны ниже.

Команды быстрой навигации

Однобуквенная команда, аналогичная клавишам быстрой навигации в режиме обзора, позволяет переходить к различным типам сообщений журнала:

  • m: любое сообщение
  • e: сообщения об ошибках (ERROR и CRITICAL)
  • w: предупреждающие сообщения (WARNING)
  • f: информационные сообщения (INFO)
  • k: маркеры, ранее помещенные в журнал
  • g: предупреждающие сообщения об отладке (DEBUGWARNING)
  • i: сообщения ввода/вывода (IO)
  • n: сообщения ввода
  • s: речевые сообщения
  • d: сообщения отладки (DEBUG)

Нажатие на одну букву приводит к переходу к следующему появлению этого сообщения. Сочетание буквы с клавишей shift приводит к переходу к предыдущему появлению этого сообщения.

Перевод речевого сообщения

Иногда вам может потребоваться просмотреть журнал, созданный в системе на иностранном языке, который вы не понимаете. Например, журнал был создан в китайской системе / NVDA, в то время как вы понимаете только французский. Если у вас установлено дополнение Instant Translate, вы можете использовать его в сочетании с командами быстрой навигации по журналу для перевода речевых сообщений.

  • Сначала настройте языки Instant Translate. Исходным языком должен быть язык системы, в которой был создан журнал (например, китайский). Целевым языком должен быть ваш язык (например, французский).
  • Откройте журнал
  • Нажмите T, чтобы включить автоматический перевод речи в журнале
  • Используйте команды быстрой навигации в журнале, например, S, I и т.д. При появлении речевого сообщения оно будет передано на вашем языке (в нашем предыдущем примере - на французском)

Если вы хотите отключить перевод речи, нажмите T ещё раз.

Откройте файл с исходным кодом в вашем редакторе

В журнале какая-то строка может ссылаться на исходный код:

  • Строка, относящаяся к обратной трассировке, содержит путь и строку в файле, например: File "virtualBuffers\__init__.pyc", line 226, in _getStoryLength
  • Строка заголовка зарегистрированного сообщения содержит функцию, которая зарегистрировала это сообщение, например: INFO - config.ConfigManager._loadConfig (22:45:26.145) - MainThread (16580):
  • Содержимое сообщения, зарегистрированного в режиме справки по вводу (регистрируется на информационном уровне): Input help: gesture kb(desktop):NVDA+t, bound to script title on globalCommands.GlobalCommands

Возможно, вы захотите открыть файл, содержащий этот код, чтобы понять контекст обратной трассировки или зарегистрированного сообщения. Просто нажмите C, чтобы открыть этот файл.

For this feature to work, you need to have configured your favorite editor's command in the add-on's settings. If you are not running NVDA from source and want to open NVDA's code, the location of NVDA source code should also have been configured.

Резервное копирование старых журналов

NVDA уже предоставляет резервную копию журнала предыдущей сессии NVDA; файл называется "nvda-old.log. Однако иногда вам может потребоваться получить доступ к более старым журналам, например, из-за того, что вам пришлось снова перезапустить NVDA, прежде чем просматривать "nvda-old.log. Это дополнение позволяет вам настроить, хотите ли вы создавать резервные копии старых журналов и сколько их; это делается в настройках дополнения.

A log manager dialog allows to view the backed up logs. It can be opened going to NVDA menu -> Tools -> Logs manager In this dialog, you can see the list of all the backup logs and perform various actions on the selected log:

  • open it (press Enter)
  • delete it (press Delete)
  • copy the log file (press control+C)

You can also select multiple logs to perform an actions on all of them.

To be able to open a log, you should first have configured the Command to open a file in your favorite editor.

Расширение консоли Python

функция openCodeFile

В консоли вы можете вызвать следующую функцию для просмотра исходного кода, который определяет переменную myVar:
openCodeFile(myVar)

For this feature to work, you need to have configured your favorite editor's command in the add-on's settings. If you are not running NVDA from source and want to open NVDA's code, the location of NVDA source code should also have been configured.

Функции 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 при ее первом открытии или при перезагрузке дополнения (NVDA+F3) после того, как консоль уже была открыта.

Например, скрипт позволяет вам выполнять новый импорт и определять псевдонимы, которые вы сможете использовать непосредственно в консоли, как показано ниже:

# Various import that I want in the console.
import globalVars as gv
import core
import ui
# Aliases
ocf = openCodeFile

Консольный скрипт Python следует разместить в следующем месте: pathToNVDAConfig\ndtt\consoleStartup.py
Например: C:\Users\myUserName\AppData\Roaming\nvda\ndtt\consoleStartup.py

Зарегистрируйте трассировку стека речевой функции

Sometimes, you may want to see which part of the code is responsible for speaking something. For this, you can enable the stack trace logging of the speech function pressing NVDA+X, S. Each time NVDA speaks, a corresponding stack trace will be logged in the log.

Примечание: Вы можете изменить файл скрипта напрямую, чтобы исправить другую функцию. Подробную информацию об использовании смотрите во всех инструкциях в файле.

Reverse translation command

Many testers use NVDA in another language than English. But when reporting test results on GitHub, the description of the modified options or the messages reported by NVDA should be written in English. Its quite frustrating and time consuming to have to restart NVDA in English to check the exact wording of the options or messages.

To avoid this, the add-on provides a reverse translation command, NVDA+X, R allowing to reverse translate NVDA's interface such as messages, control labels in the GUI, etc. This command uses NVDA's gettext translation to try to reverse translate the last speech. More specifically, the first string of the last speech sequence is reverse translated.

For example, in French NVDA, if I arrow down to the Tools menu named "Outils", NVDA will say "Outils sous-Menu o" which stands for "Tools subMenu o". If I press the reverse translation command just after that, NVDA will reverse translate "Outils" to "Tools".

Looking at the log afterwards, we can find the following lines: IO - speech.speech.speak (23:38:24.450) - MainThread (2044): Speaking ['Outils', 'sous-Menu', CharacterModeCommand(True), 'o', CharacterModeCommand(False), CancellableSpeech (still valid)] This confirms that "Outils was the first string in the speech sequence.

In case the reverse translation leads to two or more possible results, a context menu is opened listing all the possibilities.

The result of the reverse translation is also copied to the clipboard if the corresponding option is enabled, which is the default value.

Настройки

Некоторые функции дополнения могут потребовать определённой настройки. Панель настроек позволяет включать их или контролировать их работу. Чтобы просмотреть и изменить эти настройки, перейдите в меню NVDA -> Настройки и выберите категорию NVDA Dev & Test Toolbox. Доступ к этому диалогу настроек также можно получить непосредственно из диалога диспетчера журналов.

Эти параметры являются глобальными и могут быть настроены только в том случае, если активен профиль по умолчанию.

Команда для открытия файла в вашем любимом редакторе

Некоторые функции позволяют просматривать содержимое в вашем любимом редакторе. Сюда входят команды для просмотра исходного файла из журнала или из объекта в консоли, а также кнопка открытия менеджера журналов.

Чтобы их использовать, сначала необходимо настроить команду, которая будет вызываться для открытия файла в вашем любимом редакторе. Команда должна иметь вид:
"C:\path\to\my\editor\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, когда будет выполнено резервное копирование.

Copy reverse translation to clipboard

This option allows to choose if the reverse translation command also copies its result to the clipboard.

Журнал изменений

Version 7.0

  • Layered commands have been introduced; the entry point is NVDA+X. The existing commands have been modified accordingly.
  • A new command (NVDA+X, R) to reverse translate the last spoken message.
  • A new command (NVDA+X, C) to open the source code of the script associated to the next pressed gesture.
  • Added speech on demand support.
  • The log manager now allows more actions, either with the dedicated buttons in the dialogs or using keyboard shortcuts in the list: enter to open the log, control+C to copy the log file and delete to delete a log file.
  • The sorting order in the log manager has been reversed (most recent log on top).
  • Fixed an issue when trying to open a Python module with openCodeFile function.

Version 6.3

  • Compatibility with 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 теперь приводит к появлению критических сообщений об ошибках, а также обычных сообщений об ошибках.
  • Добавлены новые команды быстрой навигации по журналу для перехода к вводимым данным и речевым сообщениям.
  • A new command allow to place a marker in the log; and specific quick navigation commands in log reading mode allow to jump to them. Credit: the initial idea for this feature comes from Debug Helper add-on by Luke Davis.
  • Bubfix: The memorization of the last error do not fail anymore in some cases.
  • Bugfix: The add-on can initialize again with NVDA 2019.2.1.
  • Bugfix: Log saving feature will not fail anymore with non-ASCII logs.

Версия 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

  • Различные исправления ошибок и рефакторинг / очистка кода для решения всех вариантов использования: все поддерживаемые версии, установленные по сравнению с предыдущими. запуск из исходного кода и т.д. (вклад Łukasz Golonka)
  • Переписан модуль compa (автор Łukasz Golonka)
  • Диалог перезапуска теперь можно открыть только один раз.
  • Горячие клавиши обозревателя объектов теперь по умолчанию не назначены и должны быть сопоставлены пользователем.
  • С помощью обозревателя объектов двойное нажатие для вызова сценария, сообщающего о свойстве текущего объекта, теперь отображает полученную информацию в виде сообщения, доступного для просмотра.

Версия 2.0

  • Новая функция: Расширенный диалог перезапуска для указания некоторых дополнительных параметров при перезапуске NVDA.
  • Новая функция: расширенный режим описания.
  • Функция воспроизведения звука при ошибке была согласована в версиях NVDA до и после 2021.3.
  • Новая функция: Команды чтения журналов теперь доступны в программе просмотра журналов, а также, при необходимости, в полях редактирования или на веб-страницах.
  • Новая функция: В консоли Python доступна функция "openCodeFile" для просмотра исходного кода объекта.
  • Некоторые функции теперь отключены в защищённом режиме по соображениям безопасности.
  • Диапазон совместимости дополнения был расширен (с 2019.2 по 2021.1).
  • Выпуски теперь выполняются с помощью GitHub action, а не AppVeyor.

Версия 1.0

  • Первоначальный выпуск.

https://www.nvaccess.org/files/nvda/documentation/userGuide.html#CommandLineOptions

https://www.nvaccess.org/files/nvda/documentation/userGuide.html#PlayErrorSound

https://github.com/nvaccess/nvda/security/advisories/GHSA-xg6w-23rw-39r8#event-132994