Ist es möglich, den Browser in Selenium RC auszublenden?

92

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?

Yatendra Goel
quelle
Könnte nicht akzeptabel sein, aber wie könnten Sie den Browser nicht einfach vom Bildschirm entfernen (mit normaler Windows-UI-Automatisierung?), Wie das Fenster auf (-10000, -10000) platzieren?
BrainSlugs83
2
Da diese Frage jetzt alt ist, möchte ich Sie auf eine aktuelle Antwort am Ende dieser Seite umleiten .
Stéphane Bruckert

Antworten:

87

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.

Dave Hunt
quelle
Hier sind Anweisungen zum Erstellen einer Bat-Datei, um den Dienst zu installieren: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard
58

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
Corey Goldberg
quelle
Wenn der Code in einem virtuellen Browser ausgeführt wird, kann ich meinen PC dann normal weiter verwenden, während das Browser-Interaktionsskript ausgeführt wird?
Mugen
Die Ressourcen sind verbraucht, Ihre Maschine wird langsamer!
Tim Long
22

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.

Stéphane Bruckert
quelle
5
Es ist erwähnenswert, dass Sie den Pfad der PhantomJs.exe angeben müssen, damit dies funktioniert. Beispieldriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG
1
Ja, aber nur unter Windows.
Stéphane Bruckert
1
Sie müssen den Speicherort der Binärdatei nicht angeben, solange sie in der Umgebungsvariablen $ PATH Ihrer Umgebung gefunden werden kann.
Corey Goldberg
13

+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.

Santi
quelle
12

Unter Linux können Sie Ihren Testbrowser auf einer virtuellen Anzeige ausführen. Sie benötigen das xvfbPaket 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.

Pixelistik
quelle
Dieses Skript hat ein Zitatproblem. Wenn ich ./ephemeral-x.sh foo '*' sage, heißt es "Running: foo", gefolgt vom Inhalt meines Verzeichnisses.
Nick Retallack
4

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.

Igor Brejc
quelle
3

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

Paul Whelan
quelle
Dies ist häufig der einfachste Weg, um sicherzustellen, dass xvfb ausgeführt und von Selenium / WebDriver verwendet wird.
Samuli Pahaoja
1

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

Marlies
quelle
0

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.

Djangofan
quelle
0

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".

Chetstone
quelle
0
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.

Nestor Urquiza
quelle
0

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.

LiamººT
quelle