HTMLUnitDriver in Selenium: Tutorial sul browser headless
⚡ Riepilogo intelligente
HtmlUnitDriver è l'implementazione headless più veloce di Selenium WebDriver, mentre PhantomJS, un tempo popolare browser headless basato su GhostDriver, è deprecato dal 2018 e ora è stato sostituito da Chrome headless, headless Firefoxe Playwright per i moderni flussi di lavoro di automazione.
Un browser headless è un browser web senza interfaccia utente grafica. Può essere eseguito in background senza visualizzazione.tracOffre un modo efficiente ed efficace per testare le applicazioni web risparmiando tempo e risorse. In questo articolo, esploriamo cos'è un browser headless, quando utilizzare il test con browser headless e come eseguirlo utilizzando Selenium HtmlUnitDriver e PhantomJS.
Che cos'è un browser headless?
Un browser headless è un browser web senza un'interfaccia utente graficaQuesto programma si comporta esattamente come un normale browser, ma non visualizza alcuna finestra grafica durante l'esecuzione.
Alcuni esempi di driver per browser headless includono:
- HtmlUnit
- Fantasma
- PhantomJS (obsoleto)
- ZombieJS
- Watir-webdriver
- Chrome senza testa
- Senza testa Firefox
Quando utilizzare il test del browser headless?
Nell'era digitale odierna, le applicazioni web sono progettate per essere compatibili con un'ampia gamma di dispositivi e piattaforme. Questo rappresenta una sfida per gli sviluppatori, che devono garantire che le loro applicazioni funzionino senza problemi in ambienti diversi. Il test headless (senza interfaccia grafica) è una soluzione ideale perché consente agli sviluppatori di validare le proprie applicazioni web senza un'interfaccia utente grafica. Utilizzando il test headless, gli sviluppatori possono testare rapidamente applicazioni web complesse con molti componenti e dipendenze, accelerando i tempi di sviluppo, riducendo i bug e aumentando la soddisfazione degli utenti.
Test del browser senza testa con Selenium
Selenium è uno strumento potente per il test del browser headless, che consente agli sviluppatori di eseguire test automatizzati senza un'interfaccia utente visibile. Eseguendo i test in background, Selenium risparmia tempo e risorse e aiuta ancheping Identificare i problemi che potrebbero non essere evidenti in un ambiente di test tradizionale basato sull'interfaccia utente. Ciò include problemi di prestazioni e di layout che diventano evidenti solo in un ambiente headless. Tuttavia, è importante bilanciare i test headless con i test tradizionali basati sull'interfaccia utente per garantire una copertura completa.
Esempi popolari di browser headless
Sono disponibili numerosi browser headless, ognuno con le proprie caratteristiche e vantaggi, che li rendono adatti a diversi casi d'uso. Li analizzeremo di seguito.
PhantomJS
Avviso di deprecazione: Lo sviluppo attivo di PhantomJS si è interrotto nel 2018 e il progetto non è più mantenuto. I nuovi progetti dovrebbero preferire headless Chrome, headless Firefox, o Drammaturgo per l'automazione headless moderna. L'esempio PhantomJS riportato di seguito è incluso solo a scopo di riferimento.
PhantomJS è un browser headless che utilizza WebKit come motore di rendering e supporta standard web come HTML5, CSS3 e JavaScript. Può essere utilizzato per l'acquisizione di schermate e l'automazione di pagine web. È open-source ed è compatibile con diversi sistemi operativi.
Esempio di Selenium con Headless PhantomJS dentro 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 è il browser più popolare al mondo e offre anche una modalità headless. È compatibile con numerose piattaforme e supporta i linguaggi di programmazione e i framework più diffusi. I suoi strumenti di debug integrati e l'ampia documentazione lo rendono facile da usare e consentono di risolvere qualsiasi problema che possa presentarsi durante i test.
Esempio di Headless Chrome con 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 è un browser web popolare che può essere utilizzato anche come browser headless per i test. Un vantaggio dell'utilizzo Firefox come browser headless è il suo ingombro ridotto, che lo rende un'opzione versatile per i test su diversi sistemi operativi. In combinazione con la sua ampia documentazione e il supporto della community, Firefox è una scelta eccellente per i team che stanno sperimentando l'automazione del browser headless.
Esempio di senza testa Firefox con 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()
Vantaggi del test del browser headless
- Esecuzione del test più rapida
- Test convenienti
- Migliore copertura dei test
- Flessibilità nell'esecuzione dei test
- Integrazione più semplice con le pipeline CI/CD
Svantaggi del test del browser headless
- Assenza di interfaccia grafica visibile per l'ispezione manuale
- Il debug può essere più difficile senza uno schermo.
- Copertura limitata del comportamento specifico del browser
HtmlUnitDriver
HtmlUnitDriver è l'implementazione più leggera e veloce di un browser headless per Selenium WebDriver. È basato su HtmlUnit ed è anche noto come Driver del browser senza testaSi comporta come Chrome, IE o Firefox driver, ma non ha un'interfaccia grafica, quindi l'esecuzione del test non è visibile sullo schermo. HtmlUnitDriver è ancora mantenuto ed è distribuito tramite org.seleniumhq.selenium:htmlunit3-driver Artefatto Maven.
Caratteristiche di HtmlUnitDriver:
- Supporto per i protocolli HTTPS e HTTP
- Supporto per risposte HTML (clic sui link, invio di moduli, esplorazione del modello DOM del documento HTML e altro ancora)
- Supporto per i cookie
- Supporto per server proxy
- Supporto per l'autenticazione di base e NTLM
- Tinte Unite JavaCopione supporto
- Supporto per i metodi di invio GET e POST
- Possibilità di personalizzare le intestazioni delle richieste inviate al server
- Possibilità di controllare se le risposte non riuscite dal server debbano generare eccezioni o essere restituite come pagine del tipo appropriato.
Passaggi per utilizzare HtmlUnitDriver con Selenium
Passo 1) In Eclipse, copia il seguente codice. Aggiungi lo standard Selenium file di libreria nel progetto. Non sono necessari file JAR aggiuntivi.
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 HtmlUnit 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();
}
}
Passo 2) Esegui il codice. Noterai che non viene avviato alcun browser e i risultati vengono visualizzati nella console.
Vantaggi di HtmlUnitDriver
- Poiché non utilizza alcuna interfaccia grafica, i test vengono eseguiti in background senza interruzioni visive.
- Rispetto ad altre istanze del driver, l'esecuzione è più veloce
- È inoltre possibile emulare diverse versioni del browser durante l'esecuzione dei test tramite HtmlUnitDriver
-
È indipendente dalla piattaforma e permette di eseguire facilmente diversi test contemporaneamente. È ideale per test di carico.
limitazioni:
- Non può emulare completamente JavaComportamento degli script di ogni motore di browser reale
PhantomJS
Promemoria: PhantomJS è obsoleto e non è più supportato. Per nuovi lavori headless, utilizzare Selenium con Chrome senza testa o Firefox, oppure passare a Drammaturgo. La sezione seguente rimane solo a scopo di riferimento.
PhantomJS è un browser headless con un JavaAPI Script. Storicamente veniva utilizzata per testare siti web headless, accedere e manipolare pagine web, ed è inclusa nell'API DOM standard.
Per utilizzare PhantomJS con Selenium, hai bisogno di GhostDriver. GhostDriver è un'implementazione del protocollo WebDriver Wire in linguaggio semplice JavaScript per PhantomJS.
Le versioni successive di PhantomJS integrato GhostDriver, quindi Non è necessario installarlo separatamente.
Ecco come funziona il sistema:
Passaggi per correre Selenium con PhantomJS
Passo 1) Hai bisogno Eclipse con Selenium installato.
Passo 2) Scarica PhantomJS Qui..
Passo 3) Extracsposta la cartella scaricata in Programmi.
Passo 4) Scarica il driver PhantomJS da Qui.Aggiungi il file JAR al tuo progetto.
Passo 5) Incolla il seguente codice in Eclipse.
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();
}
}
Passo 6) Esegui il codice. Vedrai l'output nella console e non verrà avviato alcun browser.
NOTA: Al primo avvio, a seconda delle impostazioni, potresti visualizzare un avviso di sicurezza da Windows per consentire l'esecuzione di PhantomJS. Fai clic consentire l'accesso.
Storicamente, molte organizzazioni hanno utilizzato PhantomJS per attività quali:
- Test senza testa
- Cattura dello schermo
- Automazione della pagina
- Monitoraggio della rete
- Visualizzazione di schermate del dashboard per i propri utenti
- Esecuzione di test unitari dalla riga di comando
- Generazione di manuali per i dipendenti da HTML a PDF
- Combinazione con QUnit per la suite di test
Per il nuovo lavoro, sostituire questi casi d'uso di PhantomJS con Chrome headless, headless Firefox, o Playwright, che ricevono aggiornamenti continui di sicurezza e rendering.







