HTMLUnitDriver v Selenium

Bezhlavรฝ prohlรญลพeฤ je webovรฝ prohlรญลพeฤ bez grafickรฉho uลพivatelskรฉho rozhranรญ. Mลฏลพe bฤ›ลพet na pozadรญ bez vizuรกlnรญho ruลกenรญ. Nabรญzรญ efektivnรญ a efektivnรญ zpลฏsob testovรกnรญ webovรฝch aplikacรญ a zรกroveลˆ ลกetล™รญ ฤas a zdroje. V tomto tutoriรกlu se ponoล™รญme do toho, co je to bezhlavรฝ prohlรญลพeฤ, kdy pouลพรญt testovรกnรญ prohlรญลพeฤe bez hlavy a jak jej provรฉst pomocรญ Selenium.

Co je to Headless Browser?

Bezhlavรฝ prohlรญลพeฤ je webovรฝ prohlรญลพeฤ bez grafickรฉho uลพivatelskรฉho rozhranรญ. Tento program se bude chovat jako prohlรญลพeฤ, ale nebude zobrazovat ลพรกdnรฉ GUI.

Nฤ›kterรฉ pล™รญklady bezhlavรฝch ovladaฤลฏ zahrnujรญ

  • HtmlUnit
  • Duch
  • PhantomJS
  • ZombieJS
  • Watir- webovรฝ ovladaฤ

Kdy pouลพรญt bezhlavรฉ testovรกnรญ prohlรญลพeฤe?

V dneลกnรญ digitรกlnรญ dobฤ› jsou webovรฉ aplikace vyvรญjeny tak, aby byly kompatibilnรญ s ลกirokou ลกkรกlou zaล™รญzenรญ a platforem. To ฤasto pล™edstavuje vรฝzvu pro vรฝvojรกล™e webovรฝch strรกnek, kteล™รญ potล™ebujรญ zajistit bezproblรฉmovรฉ fungovรกnรญ jejich aplikacรญ na vลกech tฤ›chto platformรกch. Bezhlavรฉ testovรกnรญ prohlรญลพeฤe je ideรกlnรญm ล™eลกenรญm tohoto problรฉmu, protoลพe umoลพลˆuje vรฝvojรกล™ลฏm testovat svรฉ webovรฉ aplikace bez potล™eby grafickรฉho uลพivatelskรฉho rozhranรญ. Pomocรญ bezhlavรฉho testovรกnรญ prohlรญลพeฤe mohou vรฝvojรกล™i snadno testovat sloลพitรฉ webovรฉ aplikace s vรญce komponentami a zรกvislostmi, ฤรญmลพ dlรกลพdรญ cestu pro rychlejลกรญ vรฝvoj, kรณd bez chyb a spokojenรฉ uลพivatele.

Bezhlavรฉ testovรกnรญ prohlรญลพeฤe s Selenium

Selenium je vรฝkonnรฝ nรกstroj pro bezhlavรฉ testovรกnรญ prohlรญลพeฤe, kterรฝ umoลพลˆuje vรฝvojรกล™ลฏm spouลกtฤ›t automatizovanรฉ testy bez potล™eby viditelnรฉho uลพivatelskรฉho rozhranรญ. Spuลกtฤ›nรญm testลฏ na pozadรญ Selenium mลฏลพe uลกetล™it ฤas a zdroje a zรกroveลˆ pomoci identifikovat problรฉmy, kterรฉ nemusรญ bรฝt zjevnรฉ v tradiฤnรญm testovacรญm prostล™edรญ zaloลพenรฉm na uลพivatelskรฉm rozhranรญ. To zahrnuje problรฉmy souvisejรญcรญ s vรฝkonem a problรฉmy s rozloลพenรญm, kterรฉ se mohou projevit pouze v bezhlavรฉm nastavenรญ. Je vลกak dลฏleลพitรฉ mรญt na pamฤ›ti omezenรญ bezhlavรฉho testovรกnรญ a vyvรกลพit je tradiฤnรญmi metodami zaloลพenรฝmi na uลพivatelskรฉm rozhranรญ, aby bylo zajiลกtฤ›no komplexnรญ pokrytรญ testovรกnรญm.

Oblรญbenรฉ pล™รญklady bezhlavรฝch prohlรญลพeฤลฏ

K dispozici je mnoho bezhlavรฝch prohlรญลพeฤลฏ, z nichลพ kaลพdรฝ mรก svรฉ vlastnรญ jedineฤnรฉ funkce a vรฝhody, dรญky ฤemuลพ je vhodnรฝ pro rลฏznรฉ pล™รญpady pouลพitรญ. Diskutujeme o nich nรญลพe: -

PhantomJS

PhantomJS je bezhlavรฝ prohlรญลพeฤ, kterรฝ jako vykreslovacรญ engine vyuลพรญvรก WebKit a podporuje rลฏznรฉ webovรฉ standardy, jako jsou HTML5, CSS3 a JavaSkript. Lze jej pouลพรญt pro snรญmรกnรญ obrazovky a รบlohy automatizace strรกnek. Je open source a je kompatibilnรญ s vรญce operaฤnรญmi systรฉmy.

Pล™รญklad Selenium se vstupem Headless PhantomJS 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()

chrรณm

Chrome je nejoblรญbenฤ›jลกรญ prohlรญลพeฤ na planetฤ› a nabรญzรญ takรฉ bezhlavou funkci. Lze jej pouลพรญt na vรญce platformรกch a podporuje programovacรญ jazyky a rรกmce. Jeho vestavฤ›nรฉ ladicรญ nรกstroje a rozsรกhlรก dokumentace usnadลˆujรญ pouลพรญvรกnรญ a odstraลˆovรกnรญ problรฉmลฏ, kterรฉ mohou nastat bฤ›hem testovรกnรญ.

Pล™รญklad Headless Chrome s 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 je populรกrnรญ webovรฝ prohlรญลพeฤ, kterรฝ lze pouลพรญt takรฉ jako bezhlavรฝ prohlรญลพeฤ pro testovacรญ รบฤely. Jedna z vรฝhod pouลพรญvรกnรญ Firefox jako bezhlavรฝ prohlรญลพeฤ je jeho lehkรก povaha, coลพ z nฤ›j ฤinรญ vลกestrannou moลพnost pro testovรกnรญ na rลฏznรฝch operaฤnรญch systรฉmech. Navรญc dรญky rozsรกhlรฉ dokumentaci a podpoล™e komunity Firefox je vynikajรญcรญ volbou pro ty, kteล™รญ chtฤ›jรญ experimentovat s technologiรญ bezhlavรฉho prohlรญลพeฤe.

Pล™รญklad Headless Firefox s 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()

Vรฝhody bezhlavรฉho testovรกnรญ prohlรญลพeฤe

  • Rychlejลกรญ provedenรญ testu
  • Nรกkladovฤ› efektivnรญ testovรกnรญ
  • Lepลกรญ pokrytรญ testovรกnรญm
  • Flexibilita pล™i provรกdฤ›nรญ testลฏ
  • Integrace s CI/CD potrubรญm

Nevรฝhody bezhlavรฉho testovรกnรญ prohlรญลพeฤe

  • Nedostatek GUI
  • Potรญลพe s ladฤ›nรญm
  • Omezenรก podpora prohlรญลพeฤe

HTMLUnitDriver

HTML UnitDriver je nejlehฤรญ a nejrychlejลกรญ implementaฤnรญ bezhlavรฝ prohlรญลพeฤ pro WebDriver. Je zaloลพen na HtmlUnit. Je znรกmรก jako Bezhlavรฝ ovladaฤ prohlรญลพeฤe. Je to stejnรฉ jako Chrome, IE nebo FireFox ovladaฤ, ale nemรก GUI, takลพe na obrazovce nenรญ vidฤ›t provedenรญ testu.

Vlastnosti ovladaฤe jednotky HTML

  • Podpora protokolลฏ HTTPS a HTTP
  • Podpora HTML odpovฤ›dรญ (klikรกnรญ na odkazy, odesรญlรกnรญ formulรกล™ลฏ, prochรกzenรญ modelu DOM dokumentu HTML atd.)
  • Podpora pro soubory cookie
  • Podpora proxy serveru
  • Podpora zรกkladnรญ a NTLM autentizace
  • vynikajรญcรญ JavaScรฉnรกล™ podpora
  • Podpora metod odeslรกnรญ GET a POST
  • Schopnost pล™izpลฏsobit hlaviฤky poลพadavkลฏ odesรญlanรฝch na server
  • Schopnost urฤit, zda by neรบspฤ›ลกnรฉ odpovฤ›di ze serveru mฤ›ly vyvolat vรฝjimky nebo by mฤ›ly bรฝt vrรกceny jako strรกnky pล™รญsluลกnรฉho typu

Kroky k pouลพitรญ ovladaฤe HTMLUnit s Selenium

Krok 1) In Eclipse, zkopรญrujte nรกsledujรญcรญ kรณd. Pล™idejte do projektu soubory standardnรญ knihovny selenu. Nejsou vyลพadovรกny ลพรกdnรฉ dalลกรญ soubory jar.

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();			
         }		
}

Krok 2) Spusลฅte kรณd. Uvidรญte, ลพe nenรญ spuลกtฤ›n ลพรกdnรฝ prohlรญลพeฤ a vรฝsledky se zobrazรญ v konzole.

Postup pouลพitรญ ovladaฤe HTMLUnit s Selenium

Vรฝhody Html Unit Driver:

  • Protoลพe k testovรกnรญ nepouลพรญvรก ลพรกdnรฉ grafickรฉ uลพivatelskรฉ rozhranรญ, vaลกe testy pobฤ›ลพรญ na pozadรญ bez jakรฉhokoli vizuรกlnรญho pล™eruลกenรญ
  • Ve srovnรกnรญ se vลกemi ostatnรญmi instancemi je provรกdฤ›nรญ rychlejลกรญ
  • Chcete-li spustit testy prostล™ednictvรญm ovladaฤe HtmlUnit, mลฏลพete takรฉ vybrat jinรฉ verze prohlรญลพeฤe
  • Je nezรกvislรฝ na platformฤ› a snรกze spouลกtรญ nฤ›kolik testลฏ souฤasnฤ›. Ideรกlnรญ pro Testovรกnรญ zatรญลพenรญ.

Omezenรญ:

  • Nemลฏลพe emulovat jinรฉ prohlรญลพeฤe JavaChovรกnรญ skriptu

PhantomJS

PhantomJS je bezhlavรฝ prohlรญลพeฤ s JavaScript API. Je to optimรกlnรญ ล™eลกenรญ pro bezhlavรฉ testovรกnรญ webovรฝch strรกnek, pล™รญstup a manipulaci s webovรฝmi strรกnkami a pล™ichรกzรญ se standardnรญm DOM API.

Abyste mohli pouลพรญvat PhantomJS se Seleniunem, musรญte pouลพรญt GhostDriver. GhostDriver je implementace protokolu Webdriver Wire v jednoduchรฉm JS pro PhantomJS.

Nejnovฤ›jลกรญ verze PhatomJS mรก integrovanรฝ GhostDriver a nenรญ tล™eba jej instalovat samostatnฤ›.

Zde je nรกvod, jak systรฉm funguje -

PhantomJS

Kroky k bฤ›hu Selenium s PhatomJS

Krok 1) Potล™ebujete Eclipse s Selenium instalovรกny

Krok 2) Stรกhnฤ›te si PhantomJS zde

Kroky ke spuลกtฤ›nรญ Selenium S PhatomJS

Krok 3) Extrahujte staลพenou sloลพku do Program Files

Kroky ke spuลกtฤ›nรญ Selenium S PhatomJS

Krok 4) Stรกhnฤ›te si ovladaฤ PhantomJS z zde. Pล™idejte sklenici do svรฉho projektu

Kroky ke spuลกtฤ›nรญ Selenium S PhatomJS

Krok 5) Vloลพte nรกsledujรญcรญ kรณd do 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();			
           }		
}

Krok 6) Spusลฅte kรณd. Uvidรญte, ลพe se vรฝstup zobrazรญ v konzole a nespustรญ se ลพรกdnรฝ prohlรญลพeฤ.

POZNรMKA: Pล™i prvnรญm spuลกtฤ›nรญ se na zรกkladฤ› vaลกeho nastavenรญ mลฏลพe zobrazit bezpeฤnostnรญ upozornฤ›nรญ Windows aby bylo moลพnรฉ spustit PhantomJS. Kliknฤ›te na Povolit pล™รญstup.

Kroky ke spuลกtฤ›nรญ Selenium S PhatomJS

Mnoho organizacรญ pouลพรญvรก Phantom.JS pro rลฏznรฉ รบฤely, napล™.

  • Bezhlavรฉ testovรกnรญ
  • Screen capture
  • Automatizace strรกnek
  • Sledovรกnรญ sรญtฤ›
  • K vykreslenรญ snรญmkลฏ obrazovky ล™รญdicรญho panelu pro jejich uลพivatele
  • Chcete-li spustit testy jednotek na pล™รญkazovรฉm ล™รกdku
  • Generovรกnรญ pล™รญruฤek pro zamฤ›stnance z HTML do PDF
  • V kombinaci s QUnit pro testovacรญ sadu

Shrnutรญ

Pro rychlรฉ testovรกnรญ aplikace v rลฏznรฝch prohlรญลพeฤรญch a bez jakรฉhokoli vizuรกlnรญho pล™eruลกenรญ, bezhlavรฝ prohlรญลพeฤ Testovรกnรญ se pouลพรญvรก. Dรญky svรฉ rychlosti, pล™esnosti a snadno pล™รญstupnรฝm funkcรญm zรญskรกvajรญ ovladaฤe HTML jednotky a PhantomJS na popularitฤ› pro bezhlavรฉ testovรกnรญ automatizace prohlรญลพeฤe. Dodrลพenรญm nฤ›kolika jednoduchรฝch krokลฏ zjistรญte, jak snadno lze tyto nรกstroje integrovat s jinรฝmi nรกstroji a mohou provรกdฤ›t testovacรญ kรณd.

Shrลˆte tento pล™รญspฤ›vek takto: