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.

Schritte zur Verwendung des HTMLUnit-Treibers mit Selenium

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:

PhantomJS

Schritte zum Ausführen Selenium mit PhatomJS

Schritt 1) Du brauchst Eclipse mit Selenium installiert

Schritt 2) Laden Sie PhantomJS herunter hier

Schritte zum Ausführen Selenium Mit PhatomJS

Schritt 3) Extrahieren Sie den heruntergeladenen Ordner in „Programme“.

Schritte zum Ausführen Selenium Mit PhatomJS

Schritt 4) Laden Sie den PhantomJS-Treiber herunter von hier. Fügen Sie das Glas Ihrem Projekt hinzu

Schritte zum Ausführen Selenium Mit PhatomJS

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.

Schritte zum Ausführen Selenium Mit PhatomJS

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.