Извлечь текст из графического интерфейса X11? - PullRequest
0 голосов
/ 11 августа 2011

У меня есть приложение для торговых точек, написанное на Perl / Tk.Я использую X11 :: GUITest для автоматического тестирования, управляя приложением с помощью горячих клавиш, связанных с кнопками и другими виджетами (обычно это сенсорный экран).Тем не менее, X11 :: GUITest не имеет возможности «читать» текст обратно с экрана, поэтому я прибегаю к расширению приложения для записи временных файлов, а также к выводу данных на экран.Затем тестовые сценарии смотрят на временные файлы, а не на графический интерфейс.Но я бы хотел расширить X11 :: GUITest или создать новый CPAN-модуль, который может очищать текстовые строки из графических интерфейсов X11.Я не после преобразования графики в текст;мое (слабое) понимание того, что где-то в глубине системы X Window текст меток и тому подобное хранятся в виде текстовых строк и отображаются в виде растрового изображения в конце конвейера (?).для этого или указатели с чего начать?

Да, я знаю, что должен был придерживаться лучшего разделения MVC и не тестировать на уровне GUI, а чуть ниже;Однако реальность мешает, и это то, что есть!

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Лучший способ сделать это - заставить вашу программу работать с такой средой доступности, как ATK (используется в приложениях GTK), а затем использовать ее для запроса строк, как для программы чтения с экрана.перевод текста в речь.Это подход, принятый в Linux Desktop Testing Project и dogtail средах тестирования.Вы получаете бонус за использование существующего, хорошо протестированного кода и повышение удобства использования вашего приложения пользователями-инвалидами (как того требуют законы, такие как Закон об американцах-инвалидах в США и аналогичные законы во многих других странах).

Если ваше приложение использует современные рамки шрифтов, такие как libXft2, это может быть ваш единственный выбор, поскольку эти строки находятся только в клиентском приложении, а не на X-сервере, и преобразование символов в растровые изображения выполняется на клиенте.(Если ваш текст является сглаженным, он должен использовать их вместо устаревших API X11.)

Даже с устаревшими API X11 X-сервер не сохраняет строки, если преобразование текста в растровое изображение выполнено.готово, так что нет хорошего способа запросить их, кроме как перехватить их в этом случае.

1 голос
/ 11 августа 2011

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

...