GUI-Scripting für Linux

Tatsächlich suche ich nach einem AutoIt - Klon für Linux.

Mir sind Tools wie Sikuli , Javaauto usw. bekannt, aber sie werden es einfach nicht schneiden, da sie sich auf x-, y-Koordinaten verlassen und beispielsweise kein Fenster oder Menüelement basierend auf seinem Titeltext finden können.

Ich möchte etwas, mit dem ich das Fenster anhand seines Titels finden oder auf die Schaltfläche mit der Bezeichnung „OK“ klicken kann.

Ich habe gegoogelt und diese SuperUser-Frage und diese fünf Jahre alte So-Frage überprüft - von der ich jetzt große Teile schamlos kopieren werde, da das OP @Xeddy so gute Arbeit geleistet hat, um die Anforderungen anzugeben.

Hier ist ein einfaches Beispielskript:

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

Führen Sie das Skript aus und Sie werden sehen, dass Notepad geöffnet ist, etwas Text erscheint und dann geschlossen wird.

Nun ist das obige Beispiel, obwohl es etwas sinnlos ist, eine Demo der Art von Funktionalität und Einfachheit, nach der ich suche. Hier ist eine Erklärung für diejenigen, die kein AutoIt sprechen:

----Beginn der Erläuterung des Codes ----

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

----Ende der Erklärung----

Wie Sie verstehen können, sind die Funktionen ziemlich offensichtlich: Die Fähigkeit, Tastatur- und Mausfunktionen einfach zu simulieren, Eingaben zu lesen, Ausgaben zu verarbeiten und anzuzeigen, Programme auszuführen, Fenster zu manipulieren, Hotkeys zu registrieren usw. unnötige Klammern, Klassendeklarationen etc. Kurz gesagt: Einfach.

Das vielleicht Beste an AutoIt, das allen anderen zu fehlen scheint, ist, dass es nicht auf x,y-Koordinaten angewiesen ist - man kann nach einem Fenster nach Titel suchen (sogar warten, bis es erscheint).

Außerdem verwendet AutoIt eine Basic-ähnliche Skriptsprache mit normalen Programmierkonzepten wie IF-Anweisungen, Schleifen usw

Gibt es etwas so Mächtiges für Linux?

Bitte erläutern Sie ein wenig, warum Sikuli und Javaauto es nicht schaffen, um den Leuten zu helfen, Ihre Anforderungen besser zu verstehen.
Ich kann nicht sehen, wie man es umformuliert. Die Nachteile anderer sind 1) die Abhängigkeit von x,y-Koordinaten und 2) die Unfähigkeit, ein Fenster oder einen Menüpunkt anhand seines Titeltextes zu finden
Leider hängt auch das von X, Y-Koordinaten ab. Ich kann es nicht sagenclick the button labelled OK
Sie meinen die Steuerung von X-Windows, Wine-Apps (wie Notepad unter Linux) oder in bestimmten Fenstermanagern (wie KDE, GNOME)?

Antworten (2)

Unter Linux können Sie das Shell-Skripting (z. B. Bash ) zusammen mit den unten beschriebenen relevanten Befehlszeilentools verwenden.

xdotool

Dies ist ein Befehlszeilentool zum Vortäuschen von Eingaben von Maus und Tastatur. Es unterstützt auch Window-Manager-Aktionen wie Verschieben, Aktivieren und andere Aktionen auf Fenstern.

Homepage: jordansissel/xdotool bei GitHub

Installieren über:sudo apt-get install xdotool

Beispielskriptbeispiel:

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

Verwandt: Wie kann man von X11 weitergeleitete Apps programmgesteuert steuern?


X-Dienstprogramme

Es gibt befehlsähnliche Tools zum Verwalten von Fenstern und Anzeigen für X-Apps wie xwininfo, xdpyinfo, xpropund andere (siehe manfür weitere Details). Zusammen mit den bereits erwähnten xdotoolkönnen sie als Teil des Shell-Skripts verwendet werden, um X-Fenster zu automatisieren und zu steuern.


expect

Es gibt eine expectBefehlszeile, die zur Steuerung von Terminalprozessen verwendet wird. Wenn Ihre GUI-Anwendung also über die Befehlszeile gesteuert werden kann und einige Ausgaben zurückgibt, ist dies das Tool, das Sie verwenden können.

Zum Beispiel können Sie mix it with verwenden 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 }

Hinweis: Oben ist nur ein Pseudo-Code-Beispiel, ich habe den obigen Code nicht getestet. Es dient nur als Referenz.


AutoHotkey (AHK)

Zur Steuerung von Windows-Apps unter Linux wie z . B. notepad.exekönnen Sie AutoHotkey (AHK) unter Linux verwenden, indem Sie es unter Wine ausführen. So wird winetrickses unter Linux verwendet (siehe w_ahk_do()insrc/winetricks ), z

wine AutoHotkey.exe script.ahk

AutoHotkey unterstützt die Skriptsprache und ist ein sehr unterschätztes leistungsstarkes Tool. Einige Codebeispiele finden Sie unter Stack Overflow .


AutoIt

Genau wie oben können Sie AutoIt unter Wine ausführen .

Der AutoIt Editor SciTE 3.3.0 läuft einwandfrei. Es ist möglich, Programme zu schreiben, zu bauen oder zu kompilieren. Ich habe nicht versucht, sie in Wein laufen zu lassen, da es sinnlos erscheint. Au3Check.exe, Au3Info.exe, AutoIt3.exe starten ohne Probleme.


Siehe auch: Vergleich von GUI-Testwerkzeugen bei Wikipedia

Informationen zu einigen Python-Automatisierungsbibliotheken finden Sie unter:

In der Liste der Tools fehlt das UI Vision-Tool.

Das vielleicht Beste an AutoIt, das allen anderen zu fehlen scheint, ist, dass es nicht auf x,y-Koordinaten angewiesen ist - man kann nach einem Fenster nach Titel suchen (sogar warten, bis es erscheint).

Sikuli und UI Vision können dies beide mit integrierter OCR tun

Nicht genau das, was ich erhofft hatte, aber sehr nah dran. Tolle Empfehlungen, die anderen helfen werden. Willkommen an Bord