Скрипты графического интерфейса для Linux

По сути, я ищу клон AutoIt для Linux.

Я знаю о таких инструментах, как Sikuli , Javaauto и т. д., но они просто не будут работать, потому что они полагаются на координаты x, y и, например, не могут найти окно или пункт меню на основе его текста заголовка.

Я хочу, чтобы я мог найти окно по его заголовку или нажать кнопку с надписью «ОК».

У меня есть Googled, и я проверил этот вопрос SuperUser и этот вопрос пятилетней давности , из которого я теперь перейду к бессовестному копированию больших частей, поскольку OP @Xeddy так хорошо сформулировал требования.

Вот простой пример сценария:

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("This is some text.")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad", "Save")
Send("!n") 

Запустите скрипт, и вы увидите, что Блокнот открыт, текст появляется, а затем закрывается.

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

---- Начало объяснения кода ----

Asks user to input some text and stores it in varInput
Runs notepad.exe
Waits till window exists and is active
Sends the contents of varInput as a series of keystrokes
Sends keystrokes to go to File -> Exit
Waits till the "Save" window is active
Sends some more keystrokes

Shows a Message Box with some text and the contents of a variable

Registers a hotkey, Win+N, which when pressed executes notepad.exe

----Конец объяснения----

Итак, как вы понимаете, функции вполне очевидны: возможность легко имитировать функции клавиатуры и мыши, читать ввод, обрабатывать и отображать вывод, выполнять программы, манипулировать окнами, регистрировать горячие клавиши и т. д.. все это делается без каких-либо #includes, ненужные скобки, объявления классов и т. д. Вкратце: просто.

Возможно, самое замечательное в AutoIt, чего, похоже, не хватает всем остальным, заключается в том, что он не зависит от координат x, y — можно искать окно по заголовку (даже ждать, пока оно появится).

Кроме того, AutoIt использует язык сценариев, подобный Basic, с обычными концепциями программирования, такими как операторы IF, циклы и т. д.

Есть ли что-нибудь столь мощное для Linux?

Пожалуйста, расскажите немного о том, почему Sikuli и javaauto не подходят, чтобы помочь людям лучше понять ваши требования.
Я не вижу, как это перефразировать. Недостатки других: 1) зависимость от координат x,y и 2) невозможность найти окно или пункт меню по тексту его заголовка.
Увы, это тоже зависит от координат X, Y. я не могу сказать этоclick the button labelled OK
Вы имеете в виду управление окнами X, приложениями Wine (например, Notepad под Linux) или конкретным оконным менеджером (например, KDE, GNOME)?

Ответы (2)

В Linux вы можете использовать сценарии оболочки (например, Bash ) вместе с соответствующими инструментами командной строки, описанными ниже.

xdotool

Это инструмент командной строки для имитации ввода с помощью мыши и клавиатуры. Он также поддерживает действия оконного менеджера, такие как перемещение, активация и другие действия с окнами.

Домашняя страница: jordansisssel/xdotool на GitHub

Установить через:sudo apt-get install xdotool

Пример примера скрипта:

WID=$(xdotool search --name "Some Window Title")
xdotool key --window $WID --delay 500 space Tab Return Tab space Alt+n

Связанный: Как программно управлять переадресованными приложениями X11?


X утилиты

Существуют инструменты, похожие на команды, для управления окнами и отображением приложений X, таких как xwininfo, xdpyinfo, xpropи другие ( manдополнительные сведения см. на странице ). Наряду с уже упомянутыми xdotool, их можно использовать как часть скрипта оболочки для автоматизации и управления X windows.


expect

Есть expectкомандная строка, и она используется для управления терминальными процессами. Поэтому, если ваше приложение с графическим интерфейсом может управляться из командной строки и возвращать некоторый вывод, вы можете использовать этот инструмент.

Например, вы можете использовать смесь с xdotool:

#!/usr/bin/expect
set timeout 360
spawn some_GUI_command & # Replace with your command.
WID=$(xdotool search --name "My GUI Title")
xdotool set_window --overrideredirect 1 $WID windowunmap $WID windowmap $WID
xdotool windowsize $WID 10 100%
xdotool behave $WID mouse-enter windowfocus windowsize --usehints 80 100% &
xdotool behave $WID mouse-leave windowsize 4 100% &
xwininfo -id $WID -tree
expect "Setup" { xdotool key --window $WID --delay 500 Tab Return }

Примечание. Выше приведен пример псевдокода, я не тестировал приведенный выше код. Он просто используется для справки.


Автогорячая клавиша (AHK)

Для управления приложениями Windows в Linux, такими как notepad.exe, вы можете использовать AutoHotkey (AHK) в Linux, выполнив его под Wine. Вот как winetricksэто используется в Linux (см. w_ahk_do())src/winetricks , например

wine AutoHotkey.exe script.ahk

AutoHotkey поддерживает язык сценариев и является очень недооцененным мощным инструментом. Для некоторых примеров кода проверьте переполнение стека .


AutoIt

Как и выше, вы можете запустить AutoIt под Wine .

AutoIt Editor SciTE 3.3.0 работает безупречно. Возможно написание программ, их сборка или компиляция. Я не пробовал запускать их внутри вина, так как это кажется бессмысленным. Au3Check.exe, Au3Info.exe, AutoIt3.exe запускаются без проблем.


См. Также: Сравнение инструментов тестирования графического интерфейса в Википедии .

Для некоторых библиотек автоматизации Python см.:

В списке инструментов отсутствует инструмент UI Vision.

Возможно, самое замечательное в AutoIt, чего, похоже, не хватает всем остальным, заключается в том, что он не зависит от координат x, y — можно искать окно по заголовку (даже ждать, пока оно появится).

Sikuli и UI Vision могут делать это со встроенным OCR.

Не совсем то, на что я надеялся, но очень близко. Отличные рекомендации, которые помогут другим. Добро пожаловать на борт