webentwicklung-frage-antwort-db.com.de

Wie Sikuli im Headless-Modus arbeiten kann

Wenn wir über einen Headless-Testserver mit Sikuli verfügen (sowohl Ubuntu- als auch Windows-Konfigurationen erforderlich), wie kann dies ohne physischen Monitor und vorzugsweise für so viele Bildschirmauflösungen wie möglich funktionieren.

14
Amr Lotfy

Ich habe erfolgreich Sikuli im Headless-Modus ausgeführt (kein physischer Monitor angeschlossen)

Ubuntu: Xvfb überprüfen.

Windows: Installieren Sie den Anzeigentreiber auf dem Computer (um Headless zu sein) von den Addionstreibern für Virtualbox-Gastzugaben, und verwenden Sie TightVNC, um die Auflösung von einem anderen Computer aus der Ferne einzustellen.

Detaillierte Schritte für Windows 7

Annehmen, dass:

  1. Maschine A: Maschine ohne Kopf, Windows 7, mit vnc-Server bereit (z. B. TightVNC Server ist installiert und wartet auf Verbindungen).
  2. Maschine B: wird zur Remote-Einrichtung des virtuellen Anzeigetreibers auf Maschine A verwendet.

schritte:

  1. Laden Sie die Virtualbox-Gastadditions-Isodatei auf Maschine A von hier herunter (für die neueste Version hier und VBoxGuestAdditions_x.y.z.iso herunterladen) enter image description here
  2. Extrahieren Sie die iso-Datei (möglicherweise mit winrar) in ein Verzeichnis (nennen wir es Ordner D) enter image description here
  3. mit dem Befehl Eingabeaufforderung cd in den Ordner D
  4. Treiber-Extraktion 

    - Um die 32-Bit-Treiber nach "C:\Drivers" zu extrahieren, gehen Sie wie folgt vor:

    • VBoxWindowsAdditions-x86/extract/D = C:\Treiber

    -Für die 64-Bit-Treiber:

    • VBoxWindowsAdditions-AMD64/extract/D = C:\Treiber

    drivers extracted

  5. Zum Geräte-Manager my computer/manage

  6. hardware hinzufügenenter image description here

  7. List item

  8. List item

  9. List item

  10. List item

  11. List item

  12. List item

  13. List item

  14. List item

  15. List item

  16. Starten Sie neu und stellen Sie eine Verbindung mit dem VNC-Viewer her. Jetzt sollten Sie die Bildschirmauflösung ändern können. enter image description here

weitere wertvolle Informationen zu Launchpad .

24
Amr Lotfy

Für diejenigen, die auf ec2-Fenstermaschinen automatisieren wollten, funktionierte dies für mich: http://www.allianceglobalservices.com/blog/executing-automation-suite-on-disconnectedlocked-machines

Zusammenfassend habe ich RDC verwendet, um eine Verbindung herzustellen, den folgenden Code in einer Batchdatei auf dem Remote-Desktop abzulegen, auf ihn zu doppelklicken, und Sikulix begann, aus der Ferne zu arbeiten (löste mich gleichzeitig aus dem RDC aus). Beachten Sie, dass ec2-Windows-Maschinen standardmäßig 1024 x 768 verwenden, wenn tscon die Kontrolle übernimmt, was zu klein sein kann. Daher kann TightVnc verwendet werden, um die Auflösung vor dem Ausführen auf 1280 x 1024 zu erhöhen. 

tscon.exe 0 /dest:console
tscon.exe 1 /dest:console
tscon.exe 2 /dest:console
tscon.exe 3 /dest:console
START /DC:\Sikulix /WAIT /B C:\Sikulix\runsikulix.cmd -d 3 -r C:\test.sikuli -f C:\Sikulix\log.txt -d C:\Sikulix\userlog.txt
1
Adam Lane

Ich habe SikuliX in einem echten Headless-Modus in GCE mit einem Windows 2016-Clientsystem eingesetzt. Es braucht etwas Klebeband und andere Rube Goldberg-Vorrichtungen, aber es ist möglich.

Das Problem ist, dass Sie für GCE (und möglicherweise auch für Windows-Clients von AWS und anderen Cloud-Umgebungen) keinen virtuellen Videoadapter und keine Anzeige haben. Wenn also keine offene RDP-Verbindung zum Client besteht, gibt es keinen Bildschirm und SikuliX/OpenCV erhalten einen schwarzen 1024x768-Desktop und schlagen fehl. 

Die Frage ist also, wie man eine RDP-Verbindung aufbaut, ohne irgendwo einen Bildschirm zu haben. Ich habe dies mit Xvfb (X Windows Virtual Frame Buffer) gemacht. Dies erfordert jedoch eine zweite VM. Xvfb läuft unter Linux. Der andere Teil des Puzzles ist xfreerdp 2.0. Die 2.x-Version ist für die Kompatibilität mit aktuellen Windows-Versionen erforderlich. 1.x ist in einigen Linux-Distributionen enthalten. 2.x muss möglicherweise aus Quellen erstellt werden, abhängig davon, welche Linux-Variante Sie verwenden. Ich benutze CentOS, was ich brauchte, um mein eigenes zu bauen.

Die Befehle zum Einrichten der kopflosen RDP-Sitzung sehen nach dem Einfügen der Teile in etwa wie folgt aus:

/usr/bin/Xvfb :0 -screen 0 1920x1080x24 &
export DISPLAY=:0.0
/usr/local/bin/xfreerdp /size:1920x1080 /u:[WindowsUser] /p:"[WindowsPassword]" /v:[WindowsTarget]

In unserer Umgebung haben wir dies im Rahmen des Build-Jobs von Jenkins automatisiert. Damit dies unter dem Jenkins-Slave funktioniert, war es auch erforderlich, den Jenkins-Slave als Benutzerprozess und nicht als Dienst auszuführen. Dies kann durch Aktivieren der automatischen Admin-Anmeldung und Einstellen des Slave-Startskripts als Lauf (auf logon) Befehl.

1
Paul Chambre