HTMLUnitDriver in Selenium
Ein Headless-Browser ist ein Webbrowser ohne grafische Benutzeroberfläche. Es kann ohne visuelle Ablenkung im Hintergrund laufen. Es bietet eine effiziente und effektive Möglichkeit, Webanwendungen zu testen und gleichzeitig Zeit und Ressourcen zu sparen. In diesem Tutorial erfahren Sie, was ein Headless-Browser ist, wann man Headless-Browser-Tests verwenden sollte und wie man ihn damit durchführt Selenium.
Was ist Headless-Browser?
Ein Headless-Browser ist ein Webbrowser ohne grafische Benutzeroberfläche. Dieses Programm verhält sich wie ein Browser, zeigt jedoch keine grafische Benutzeroberfläche an.
Einige Beispiele für Headless-Treiber sind:
- HtmlEinheit
- Ghost
- PhantomJS
- ZombieJS
- Watir-Webtreiber
Wann sollten Headless-Browser-Tests verwendet werden?
Im heutigen digitalen Zeitalter werden Webanwendungen so entwickelt, dass sie mit einer Vielzahl von Geräten und Plattformen kompatibel sind. Dies stellt für Website-Entwickler oft eine Herausforderung dar, da sie sicherstellen müssen, dass ihre Anwendungen auf diesen Plattformen reibungslos funktionieren. Headless-Browsertests sind eine ideale Lösung für dieses Problem, da Entwickler damit ihre Webanwendungen testen können, ohne dass eine grafische Benutzeroberfläche erforderlich ist. Durch die Verwendung von Headless-Browsertests können Entwickler problemlos komplexe Webanwendungen mit mehreren Komponenten und Abhängigkeiten testen und so den Weg für eine schnellere Entwicklung, fehlerfreien Code und zufriedene Benutzer ebnen.
Headless-Browsertests mit Selenium
Selenium ist ein leistungsstarkes Tool für Headless-Browsertests, mit dem Entwickler automatisierte Tests durchführen können, ohne dass eine sichtbare Benutzeroberfläche erforderlich ist. Durch die Ausführung von Tests im Hintergrund Selenium kann Zeit und Ressourcen sparen und gleichzeitig dabei helfen, Probleme zu identifizieren, die in einer herkömmlichen UI-basierten Testumgebung möglicherweise nicht erkennbar sind. Dazu gehören leistungsbezogene Probleme und Layoutprobleme, die möglicherweise nur in einer Headless-Umgebung sichtbar werden. Es ist jedoch wichtig, die Einschränkungen des Headless-Testens im Auge zu behalten und es mit herkömmlichen UI-basierten Methoden in Einklang zu bringen, um eine umfassende Testabdeckung sicherzustellen.
Beliebte Beispiele für Headless-Browser
Es gibt viele Headless-Browser, von denen jeder seine eigenen einzigartigen Funktionen und Vorteile hat, wodurch er für verschiedene Anwendungsfälle geeignet ist. Wir besprechen sie unten: –
PhantomJS
PhantomJS ist ein Headless-Browser, der WebKit als Rendering-Engine verwendet und verschiedene Webstandards wie HTML5, CSS3 und JavaSkript. Es kann für Bildschirmaufnahmen und Seitenautomatisierungsaufgaben verwendet werden. Es ist Open Source und mit mehreren Betriebssystemen kompatibel.
Beispiel von Selenium mit Headless PhantomJS in Python
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # Set up PhantomJS options phantomjs_options = webdriver.DesiredCapabilities.PHANTOMJS.copy() phantomjs_options['phantomjs.page.settings.userAgent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' # Set up the PhantomJS driver driver = webdriver.PhantomJS('/path/to/phantomjs', desired_capabilities=phantomjs_options) # Perform actions using the driver driver.get('https://www.example.com') print(driver.title) # Close the driver driver.quit()
Chrome
Chrome ist der beliebteste Browser der Welt und bietet auch eine Headless-Funktion. Es ist plattformübergreifend einsetzbar und unterstützt Programmiersprachen und Frameworks. Die integrierten Debugging-Tools und die umfangreiche Dokumentation erleichtern die Verwendung und die Behebung von Problemen, die beim Testen auftreten können.
Beispiel für Headless Chrome mit Selenium in Python
from selenium import webdriver from selenium.webdriver.chrome.options import Options # Set up Chrome options chrome_options = Options() chrome_options.add_argument('--headless') # Run Chrome in headless mode chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # Set up the Chrome driver driver = webdriver.Chrome('/path/to/chromedriver', options=chrome_options) # Perform actions using the driver driver.get('https://www.example.com') print(driver.title) # Close the driver driver.quit()
Firefox
Firefox ist ein beliebter Webbrowser, der zu Testzwecken auch als Headless-Browser verwendet werden kann. Einer der Vorteile der Verwendung Firefox als Headless-Browser ist seine Leichtgewichtigkeit, was ihn zu einer vielseitigen Option für Tests auf verschiedenen Betriebssystemen macht. Darüber hinaus bietet er mit seiner umfangreichen Dokumentation und Community-Unterstützung Firefox ist eine ausgezeichnete Wahl für diejenigen, die mit der Headless-Browser-Technologie experimentieren möchten.
Beispiel für Headless Firefox mit Selenium in Python
from selenium import webdriver from selenium.webdriver.firefox.options import Options # Set up Firefox options firefox_options = Options() firefox_options.add_argument('--headless') # Run Firefox in headless mode # Set up the Firefox driver driver = webdriver.Firefox(options=firefox_options) # Perform actions using the driver driver.get('https://www.example.com') print(driver.title) # Close the driver driver.quit()
Vorteile von Headless Browser Testing
- Schnellere Testausführung
- Kostengünstige Tests
- Bessere Testabdeckung
- Flexibilität bei der Durchführung von Tests
- Integration in CI / CD-Pipelines
Nachteile von Headless Browser Testing
- Fehlende GUI
- Schwierigkeiten beim Debuggen
- Eingeschränkte Browserunterstützung
HTMLUnitDriver
HTML UnitDriver ist der leichteste und am schnellsten implementierte Headless-Browser für WebDriver. Es basiert auf HtmlUnit. Es ist bekannt als Headless-Browser-Treiber. Es ist dasselbe wie Chrome, IE oder FireFox Treiber, aber er verfügt nicht über eine grafische Benutzeroberfläche, sodass man die Testausführung nicht auf dem Bildschirm sehen kann.
Funktionen des HTML-Einheitentreibers
- Unterstützung für die Protokolle HTTPS und HTTP
- Unterstützung für HTML-Antworten (Anklicken von Links, Senden von Formularen, Durchlaufen des DOM-Modells des HTML-Dokuments usw.)
- Unterstützung für Cookies
- Unterstützung für Proxyserver
- Unterstützung für Basis- und NTLM-Authentifizierung
- Ausgezeichnet JavaSkript Support
- Unterstützung für die Übermittlungsmethoden GET und POST
- Möglichkeit, die an den Server gesendeten Anforderungsheader anzupassen
- Möglichkeit zu bestimmen, ob fehlgeschlagene Antworten vom Server Ausnahmen auslösen oder als Seiten des entsprechenden Typs zurückgegeben werden sollen
Schritte zur Verwendung des HTMLUnit-Treibers mit Selenium
Schritt 1) In Eclipse, kopieren Sie den folgenden Code. Fügen Sie dem Projekt die Standard-Selenium-Bibliotheksdateien hinzu. Es sind keine zusätzlichen JAR-Dateien erforderlich.
package htmldriver; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class htmlUnitYest { public static void main(String[] args) { // Creating a new instance of the HTML unit driver WebDriver driver = new HtmlUnitDriver(); // Navigate to Google driver.get("http://www.google.com"); // Locate the searchbox using its name WebElement element = driver.findElement(By.name("q")); // Enter a search query element.sendKeys("Guru99"); // Submit the query. Webdriver searches for the form using the text input element automatically // No need to locate/find the submit button element.submit(); // This code will print the page title System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } }
Schritt 2) Führen Sie den Code aus. Sie werden feststellen, dass kein Browser gestartet wird und die Ergebnisse in der Konsole angezeigt werden.
Vorteile des HTML-Einheitentreibers:
- Da zum Testen keine grafische Benutzeroberfläche verwendet wird, werden Ihre Tests ohne visuelle Unterbrechung im Hintergrund ausgeführt
- Im Vergleich zu allen anderen Instanzen ist die Ausführung schneller
- Um Ihre Tests über den HtmlUnit-Treiber auszuführen, können Sie auch andere Browserversionen auswählen
-
Es ist plattformunabhängig und einfacher, mehrere Tests gleichzeitig auszuführen. Ideal für Load Testing.
Einschränkungen:
- Es kann keine anderen Browser emulieren JavaSkriptverhalten
PhantomJS
PhantomJS ist ein Headless-Browser mit JavaSkript-API. Es ist eine optimale Lösung für Headless-Website-Tests, den Zugriff auf und die Bearbeitung von Webseiten und wird mit der Standard-DOM-API geliefert.
Um PhantomJS mit Seleniun verwenden zu können, muss man GhostDriver verwenden. GhostDriver ist eine Implementierung des Webdriver Wire-Protokolls in einfachem JS für PhantomJS.
Die neueste Version von PhatomJS hat integriert GhostDriver und Es ist nicht erforderlich, es separat zu installieren.
So funktioniert das System:
Schritte zum Ausführen Selenium mit PhatomJS
Schritt 1) Du brauchst Eclipse mit Selenium installiert
Schritt 2) Laden Sie PhantomJS herunter hier
Schritt 3) Extrahieren Sie den heruntergeladenen Ordner in „Programme“.
Schritt 4) Laden Sie den PhantomJS-Treiber herunter von hier. Fügen Sie das Glas Ihrem Projekt hinzu
Schritt 5) Fügen Sie den folgenden Code in Eclipse ein
package htmldriver; import java.io.File; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.phantomjs.PhantomJSDriver; public class phantom { public static void main(String[] args) { File file = new File("C:/Program Files/phantomjs-2.0.0-windows/bin/phantomjs.exe"); System.setProperty("phantomjs.binary.path", file.getAbsolutePath()); WebDriver driver = new PhantomJSDriver(); driver.get("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Guru99"); element.submit(); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } }
Schritt 6) Führen Sie den Code aus. Sie werden feststellen, dass die Ausgabe in der Konsole angezeigt wird und kein Browser gestartet wird.
HINWEIS: Beim ersten Start erhalten Sie je nach Ihren Einstellungen möglicherweise eine Sicherheitswarnung von Windows um die Ausführung von PhantomJS zu ermöglichen. Klicken Sie auf Zugriff zulassen.
Viele Organisationen nutzen Phantom.JS für verschiedene Zwecke, zum Beispiel
- Headless-Tests
- Screen Capture
- Seitenautomatisierung
- Network Monitoring
- Um Dashboard-Screenshots für ihre Benutzer zu rendern
- Um Unit-Tests auf der Befehlszeile auszuführen
- Generieren von Mitarbeiterhandbüchern von HTML nach PDF
- Kombiniert mit QUnit für die Testsuite
Zusammenfassung
Zum schnellen Testen der Anwendung in verschiedenen Browsern und ohne visuelle Unterbrechung, Headless-Browser Testen wird verwendet. Aufgrund ihrer Geschwindigkeit, Genauigkeit und leicht zugänglichen Funktionen werden HTML-Unit-Treiber und PhantomJS für Headless-Browser-Automatisierungstests immer beliebter. Indem Sie einige einfache Schritte befolgen, erfahren Sie, wie einfach diese Tools in andere Tools integriert werden können und den Testcode ausführen können.