По сути, я ищу клон 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?
В 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, таких как 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 }
Примечание. Выше приведен пример псевдокода, я не тестировал приведенный выше код. Он просто используется для справки.
Для управления приложениями Windows в Linux, такими как notepad.exe
, вы можете использовать AutoHotkey (AHK) в Linux, выполнив его под Wine. Вот как winetricks
это используется в Linux (см. w_ahk_do()
)src/winetricks
, например
wine AutoHotkey.exe script.ahk
AutoHotkey поддерживает язык сценариев и является очень недооцененным мощным инструментом. Для некоторых примеров кода проверьте переполнение стека .
Как и выше, вы можете запустить AutoIt под Wine .
AutoIt Editor SciTE 3.3.0 работает безупречно. Возможно написание программ, их сборка или компиляция. Я не пробовал запускать их внутри вина, так как это кажется бессмысленным. Au3Check.exe, Au3Info.exe, AutoIt3.exe запускаются без проблем.
См. Также: Сравнение инструментов тестирования графического интерфейса в Википедии .
Для некоторых библиотек автоматизации Python см.:
В списке инструментов отсутствует инструмент UI Vision.
Возможно, самое замечательное в AutoIt, чего, похоже, не хватает всем остальным, заключается в том, что он не зависит от координат x, y — можно искать окно по заголовку (даже ждать, пока оно появится).
Холрой
Мог говорит восстановить Монику
будет
Мог говорит восстановить Монику
click the button labelled OK
Кенорб