Unterstützt Selenium kopflose Browsertests?

73

Ich schaue gerade auf Selenium Server und sehe anscheinend keinen Treiber, der kopflose Browsertests unterstützt.

Wenn ich mich nicht irre, wird es nicht unterstützt. Wenn Sie auf X sind, können Sie einen virtuellen Framebuffer erstellen, um das Browserfenster auszublenden. Dies ist jedoch kein wirklich kopfloser Browser.

Kann mich jemand aufklären? Unterstützt Selenium kopflose Browsertests?

khoomeister
quelle

Antworten:

19

Sie müssen PhantomJS nicht als Alternative zu Selen verwenden. Selenium enthält eine PhantomJS-Webdriver-Klasse, die auf der GhostDriver-Plattform ausgeführt wird. Installieren Sie einfach die PhantomJS-Binärdatei auf Ihrem Computer. In Python können Sie dann Folgendes verwenden:

from selenium import webdriver
dr = webdriver.PhantomJS() 

und voila.

Magenta Nova
quelle
Headless Selenium Testing mit Python und PhantomJS - realpython.com/blog/python/…
Fragmente
4
Verwenden Sie PhantomJS nicht, es ist nicht sehr zuverlässig. Benutzer sollten Xvfb verwenden, um Chrome oder Firefox auszuführen.
ffxsam
3
Update: PhantomJS wird aufgrund der --headlessFlagge von Chrome 51 nicht mehr unterstützt
Jay Wick,
15

Die WebDriver-API unterstützt HTMLUnit als Browser für Ihre Tests. Ruby-Leute benutzen Capybara schon eine Weile für ihre kopflosen Selentests, also ist es definitiv machbar.

AutomatedTester
quelle
Entschuldigung, hier bin ich etwas verwirrt - was ist der Unterschied zwischen Selen und Webdriver?
Khoomeister
1
Eine gute Beschreibung von Selenium und WebDriver finden Sie in Ross Pattersons Antwort unter stackoverflow.com/questions/6995016/…
Craig Delthony,
1
Alte Frage, aber wäre großartig, wenn Sie Ihre Antwort so bearbeiten könnten, dass sie auch PhantomJS enthält.
Arpit Rai
11

Ich weiß, dass dies ein alter Beitrag ist. Dachte, es wird anderen helfen, die nach einer Antwort suchen.

Sie können mit XVFB ein vollwertiges Firefox in jeder Linux-Distribution installieren. Dies stellt sicher, dass Ihre Tests in einem echten Browser durchgeführt werden. Sobald Sie ein Headless-Setup haben, können Sie einen Webdriver Ihrer Wahl verwenden, um eine Verbindung herzustellen und Tests auszuführen.

Arun
quelle
7

Headless Browser sind eine schlechte Idee. Sie bieten Ihnen einige Tests, aber nichts Vergleichbares zu dem, was ein echter Benutzer sehen wird, und sie maskieren viele Probleme, auf die nur echte Browser stoßen. Sie sind unendlich besser dran , wenn Sie einen " Headed " -Browser ( dh alles andere als HTMLUnit) in einer Headless-Umgebung ( z. B. Windows oder Linux mit XVFB) verwenden.

Ross Patterson
quelle
16
Nein, Sie möchten eine kontinuierliche Integration, also ist kopflos nur Logik. Warum sollte es Probleme maskieren? Headless bedeutet einfach, dass kein Grafikgerät verwendet wird.
Roland Kofler
1
@Roo Das OP sagte deutlich: " Sie können einen virtuellen Framebuffer erstellen, um das Browserfenster auszublenden, aber das ist kein wirklich kopfloser Browser. " Er meinte nicht " kein Grafikgerät verwendet ". In der Tat sind Sie und ich uns einig - führen Sie einen echten Browser ohne Anzeige aus und alles wird gut.
Ross Patterson
1
@Roo, ich habe gesehen, dass kopflose Tests fehlgeschlagen sind, wenn in der Praxis die Web-App in allen Browsern einwandfrei funktioniert und der Code in Ordnung ist. Und ich habe gesehen, dass kopflose Tests erfolgreich waren, wenn in der Praxis die Web-App zumindest in einigen Browsern defekt ist. Ich vertraue keinen kopflosen Tests. Sie sind vermutlich besser als nichts, sollten aber mit automatischen Tests der "wichtigsten" Browser für die betreffende Web-App kombiniert werden.
KajMagnus
@KajMagnus Ich habe gesehen, dass "kopflose" Tests auf xvfb fehlschlagen, wenn sie in der Praxis in einer realen grafischen Umgebung funktionieren. Es ist nur der Schmerz, in dieser Phase seiner Entwicklung mit Webdriver arbeiten zu müssen. Viele Bugs, viele Kopfschmerzen, keine wirklichen Alternativen ...
Antimaterie
7

Ich stelle fest, dass Sie sagen, dass die Verwendung eines X-Framebuffers keine echte kopflose Lösung ist. Für die meisten halte ich dies jedoch für akzeptabel. Darüber hinaus hilft Ihnen dieser Service dabei , dies für Sie in Gang zu bringen, wenn Sie daran als Lösung interessiert sind.

General Redneck
quelle
2

Selenium unterstützt in gewisser Weise kopflose Browsertests. Docker Selen wird von SeleniumHQ gewartet. Diese Docker-Container werden standardmäßig mit xvfb-Unterstützung geliefert. Es gibt Tools wie PhantomJS, die Sie mit Selenium verbinden können. Es wird jedoch nicht offiziell von Selenium selbst unterstützt.

Ähnlich wie andere beschrieben haben, wird PhantomJS nicht wirklich empfohlen. Der springende Punkt bei Selen ist die Automatisierung von Browsern. Aber warum einen Browser automatisieren, den niemand benutzt? Ich habe nie verstanden, wie das von Entwicklern so oft übersehen wurde.

Sean
quelle
2

Ja. Selenium unterstützt kopflose Browsertests und ist schneller und praktischer für eine große Anzahl von Testfällen.

ChromeOptions cromeOptions = new ChromeOptions();

//Location of browser binary/.exe file
cromeOptions.setBinary("/usr/bin/google-chrome-stable");

cromeOptions.addArguments("--headless");
cromeOptions.addArguments("--no-sandbox");
cromeOptions.addArguments("--disable-gpu");
cromeOptions.addArguments("--window-size=1920,1080");

WebDriver webDriver = new ChromeDriver(cromeOptions);
Radadiya Nikunj
quelle
0

Ja, Selen unterstützt kopflose Browsertests ... aber ich habe festgestellt, dass HTMLUnit meistens fehlschlägt ... Ich habe nach einer Alternative gesucht ... PhantomJs war wirklich gut. Sie können es definitiv ausprobieren, es war im Vergleich zu anderen Browsern sehr schnell ... Es ist wirklich gut für Rauchprüfungen ...

http://phantomjs.org/

Vicky
quelle
0

Mit Ruby und MacOS: brew install phantomjsdann:

driver = Selenium::WebDriver.for :phantomjs
Dorian
quelle
0

Ja, Selenium unterstützt das Testen von Headless-Browsern. Headless-Browser sind schneller als Echtzeit-Browser.

Siva K.
quelle
0

Installieren chromeDriverund google-chrome-stableversionieren Sie auf dem Linux-Server, wo die Tests ausgelöst werden, und fügen Sie Ihrem Code dieselben Binärdateien hinzu.

Code-Auszug:

private static String driverPath = "/usr/bin/chromedriver";
static
{
    System.setProperty("webdriver.chrome.driver", driverPath);
    options = new ChromeOptions();
    options.setBinary("/usr/bin/google-chrome-stable");
    options.addArguments("headless");
    driver = new ChromeDriver(options);
}
ConfuserUser
quelle
0

Hier ist eine "moderne Antwort" zur Verwendung von Selenium mit xvfb- und Firefox-Treibern in einer Ubuntu Linux-Umgebung, in der Django / Python ausgeführt wird:

# install xvfb and Firefox driver
sudo su
apt-get install -y xvfb firefox
wget https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz
tar -x geckodriver -zf geckodriver-v0.19.1-linux64.tar.gz -O > 
/usr/bin/geckodriver
chmod +x /usr/bin/geckodriver

# install pip modules
pip install selenium
pip install PyVirtualDisplay

Sie können dann den Anweisungen von Django LiveServerTestCase folgen .

Gehen Sie folgendermaßen vor, um den soeben installierten Treiber zu verwenden:

from pyvirtualdisplay import Display
from selenium.webdriver.firefox.webdriver import WebDriver

driver = WebDriver(executable_path='/usr/bin/geckodriver')
display = Display(visible=0, size=(800, 600)).start()

# add your testing classes here...

driver.quit()
display.stop()
Wolkenhandwerker
quelle