Ich verwende Selenium RC, um einige Browseroperationen zu automatisieren, aber ich möchte, dass der Browser unsichtbar ist. Ist das möglich? Wie? Was ist mit Selenium Grid? Kann ich das Selenium RC-Fenster auch ausblenden?
Ich verwende Selenium RC, um einige Browseroperationen zu automatisieren, aber ich möchte, dass der Browser unsichtbar ist. Ist das möglich? Wie? Was ist mit Selenium Grid? Kann ich das Selenium RC-Fenster auch ausblenden?
Antworten:
Es gibt einige Optionen:
Sie können Selenium Grid verwenden, damit der Browser auf einem völlig anderen Computer (oder einer virtuellen Maschine) geöffnet wird, zu dem Sie dann eine Verbindung über VNC oder Remotedesktopverbindung herstellen können, wenn Sie den Browser anzeigen möchten. Eine weitere Option: Wenn Sie einen Jenkins-Vordergrundprozess auf diesem Remoteserver ausführen, kann er Ihr Testprojekt auf dem Desktop ausführen.
Sie können Selenium unter Linux in XVFB "kopflos" ausführen. Ich habe es noch nie versucht und bezweifle, dass sich die Mühe wirklich lohnt. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Sie können Selenium RC in einen Windows-Dienst einbinden. http://support.microsoft.com/kb/137890 . Abgesehen davon, dass Berechtigungsbeschränkungen für spätere Windows-Versionen wahrscheinlich verhindern, dass Selenium auf den Desktop zugreift, wie dies Windows 2000 verwendet hat.
Eine andere Möglichkeit wäre, etwas wie WebDriver HTMLUnitDriver zu verwenden, das keinen "echten" Browser startet. http://code.google.com/p/webdriver/ . Es gibt auch eine PhantomJS-Option sowie ein "kopfloses Chrome", das Sie verwenden können.
Natürlich gibt es auch die Möglichkeit, einen Dienst wie SauceLabs zu verwenden, mit dem Sie Ihre Tests in der Cloud ausführen können. Nachdem Ihre Tests abgeschlossen sind, können Sie sich ein Video ansehen, in dem sie ausgeführt werden.
Unter Linux können Sie WebDriver in einer kopflosen (virtuellen) Anzeige ausführen, um den Browser auszublenden. Dies kann mit Xvfb (X Virtual Framebuffer) erfolgen.
Sie können Xvfb direkt aus Python-Code steuern, indem Sie Folgendes verwenden xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
Python-Code zum Ausführen von Headless würde folgendermaßen aussehen:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Installieren Sie Abhängigkeiten von Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Ich habe es leicht geschafft, das Browserfenster auszublenden.
Installieren Sie einfach PhantomJS . Ändern Sie dann diese Zeile:
driver = webdriver.Firefox()
zu:
driver = webdriver.PhantomJS()
Der Rest Ihres Codes muss nicht geändert werden und es wird kein Browser geöffnet. Verwenden Sie zum Debuggen driver.save_screenshot('screen.png')
verschiedene Schritte Ihres Codes.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
+1 für Selenium RC als Windows-Dienst.
Ich denke, dass Sie unter Windows nicht viele Lösungen haben, wenn die Tests vollständig ausgeblendet sind.
Was würde ich tun, um einen Computer in Ihrem LAN dafür zu reservieren, ständig online zu sein und einen Selenium-RC-Server laufen zu lassen? Sie verwenden also die IP dieses Computers anstelle von localhost, um Ihre Tests auszuführen. Beispielsweise:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(wenn man bedenkt, dass dies die IP des Computers ist, auf dem der Server ausgeführt wird).
Mit diesem Setup führen Sie Ihre Tests auf Ihrem Computer aus. Die Browser und das RC-Server-Fenster befinden sich auf einem anderen Computer. Sobald Sie fertig sind, kehren Sie zu Ihrem zurück.
Unter Linux können Sie Ihren Testbrowser auf einer virtuellen Anzeige ausführen. Sie benötigen das xvfb
Paket zum Erstellen eines virtuellen X-Servers. Führen Sie auf Debian-basierten Distributionen einfach aus
sudo apt-get install xvfb
Es gibt ein nettes Tool ephemeral-x.sh
, mit dem Sie bequem jeden Befehl einrichten können, der auf der virtuellen Anzeige ausgeführt werden soll. Laden Sie es herunter und machen Sie es ausführbar:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Dann können Sie es einfach verwenden, um den Selenium-Server zu starten:
./ephemeral-x.sh java -jar selenium-standalone.jar
Alle von Selenium erstellten Browserfenster verwenden jetzt die virtuelle Anzeige und sind für Sie unsichtbar.
Wenn Sie unter Windows arbeiten, können Sie die Tests unter einem anderen Benutzerkonto ausführen . Dies bedeutet, dass der Browser und der Java-Server für Ihr eigenes Konto nicht sichtbar sind.
So führe ich meine Tests mit maven auf einem Linux-Desktop (Ubuntu) aus. Ich hatte es satt, nicht mit dem Firefox-Webdriver arbeiten zu können, der immer im Fokus stand.
Ich habe xvfb installiert
xvfb-run -a mvn Neuinstallation
Das ist es
In vielen Fällen wird PhantomJS Ihren Anforderungen nicht vollständig entsprechen. Ich möchte auf die in Dave Hunts Antwort erwähnte Option für kopfloses Chrom näher eingehen.
Chrome 57 hat diese Funktion gerade gestartet. Sie können es verwenden, indem Sie das Flag --headless über ChromeDriver übergeben. Weitere Informationen finden Sie in der Diskussion in dieser Frage
Es gibt ein PhantomJS-Projekt namens GhostDriver , mit dem PhantomJS-Instanzen in einem Selenium Grid mithilfe des Webdriver Wire JSON-Protokolls ausgeführt werden sollen. Das ist wahrscheinlich das, wonach Sie suchen, obwohl diese Frage jetzt 4 Jahre alt ist.
Unter MacOSX konnte ich das Browserfenster nicht ausblenden, aber zumindest habe ich herausgefunden, wie ich es auf eine andere Anzeige verschieben kann, damit mein Workflow nicht so stark gestört wird. Während Firefox Tests ausführt, klicken Sie einfach bei gedrückter Ctrl-Taste auf das entsprechende Symbol im Dock, wählen Sie "Optionen" und "Zu Anzeige zuweisen 2".
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
Übrigens ist dies eine Funktion, die von jedem Entwickler benötigt wird, der e2e ausführt und logischerweise Browser erzeugt. In einer Entwicklungsumgebung ist es ärgerlich, sich mit dem Fenster zu befassen, das immer wieder auftaucht und mit dem Sie versehentlich interagieren können, sodass der Test fehlschlägt.
Die Verwendung von kopflosem Chrome ist die beste Wahl, oder Sie können direkt auf der Website posten, um mit ihr zu interagieren. Dies spart viel Rechenleistung für andere Dinge / Prozesse. Ich benutze dies, wenn ich Web-Automatisierungs-Bots teste, die auf mehreren Websites mit CPU-schweren Elementen nach Schuhen suchen. Je mehr Energie Sie sparen und je einfacher Ihr Programm ist, desto einfacher ist es, mehrere Prozesse gleichzeitig mit muhc schneller und schneller auszuführen Verlässlichkeit.