HTMLUnitDriver ใน Seleniumบทช่วยสอนการใช้งาน Headless Browser :
⚡ สรุปอย่างชาญฉลาด
HtmlUnitDriver คือการใช้งานแบบ headless ที่เร็วที่สุด Selenium WebDriver ในขณะที่ PhantomJS ซึ่งเคยเป็นเบราว์เซอร์แบบ Headless ที่ใช้ GhostDriver ที่ได้รับความนิยมนั้น ถูกยกเลิกการใช้งานตั้งแต่ปี 2018 และถูกแทนที่ด้วย Chrome แบบ Headless แล้ว Firefoxและ Playwright สำหรับเวิร์กโฟลว์การทำงานอัตโนมัติสมัยใหม่

เบราว์เซอร์แบบไร้หัว (Headless browser) คือเบราว์เซอร์เว็บที่ไม่มีส่วนติดต่อผู้ใช้แบบกราฟิก สามารถทำงานในพื้นหลังได้โดยไม่รบกวนการมองเห็นtracการทดสอบด้วยเบราว์เซอร์แบบไร้หัว (Headless Browser) เป็นวิธีที่มีประสิทธิภาพและประสิทธิผลในการทดสอบเว็บแอปพลิเคชัน พร้อมทั้งประหยัดเวลาและทรัพยากร ในบทความนี้ เราจะสำรวจว่าเบราว์เซอร์แบบไร้หัวคืออะไร เมื่อใดควรใช้การทดสอบด้วยเบราว์เซอร์แบบไร้หัว และวิธีการดำเนินการทดสอบโดยใช้เบราว์เซอร์แบบไร้หัว Selenium HtmlUnitDriver และ PhantomJS
เบราว์เซอร์แบบไร้ส่วนหัว (Headless Browser) คืออะไร?
เบราว์เซอร์แบบไร้หัว (Headless Browser) คือเบราว์เซอร์เว็บชนิดหนึ่ง โดยไม่มีส่วนติดต่อผู้ใช้แบบกราฟิกโปรแกรมนี้ทำงานเหมือนกับเบราว์เซอร์ทั่วไป แต่จะไม่แสดงหน้าต่าง GUI ใดๆ ระหว่างการทำงาน
ตัวอย่างของไดรเวอร์เบราว์เซอร์แบบไม่มีส่วนติดต่อผู้ใช้ ได้แก่:
- Htmlหน่วย
- ผี
- PhantomJS (เลิกใช้งานแล้ว)
- ซอมบี้JS
- Watir-เว็บไดรเวอร์
- หัวขาด Chrome
- หัวขาด Firefox
เมื่อใดจึงควรใช้การทดสอบเบราว์เซอร์ Headless
ในยุคดิจิทัลปัจจุบัน แอปพลิเคชันบนเว็บถูกสร้างขึ้นให้ใช้งานได้กับอุปกรณ์และแพลตฟอร์มที่หลากหลาย นี่เป็นความท้าทายสำหรับนักพัฒนาที่ต้องตรวจสอบให้แน่ใจว่าแอปพลิเคชันของตนทำงานได้อย่างราบรื่นในสภาพแวดล้อมที่แตกต่างกัน การทดสอบเบราว์เซอร์แบบไร้ส่วนติดต่อผู้ใช้ (Headless browser testing) เป็นวิธีแก้ปัญหาที่เหมาะสม เพราะช่วยให้นักพัฒนาสามารถตรวจสอบความถูกต้องของแอปพลิเคชันบนเว็บได้โดยไม่ต้องมีส่วนติดต่อผู้ใช้แบบกราฟิก ด้วยการใช้การทดสอบเบราว์เซอร์แบบไร้ส่วนติดต่อผู้ใช้ นักพัฒนาสามารถครอบคลุมแอปพลิเคชันบนเว็บที่ซับซ้อนซึ่งมีส่วนประกอบและการพึ่งพาจำนวนมากได้อย่างรวดเร็ว ปูทางไปสู่การพัฒนาที่รวดเร็วขึ้น ข้อผิดพลาดน้อยลง และผู้ใช้มีความสุขมากขึ้น
การทดสอบเบราว์เซอร์แบบไม่มีส่วนหัวด้วย Selenium
Selenium เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการทดสอบเบราว์เซอร์แบบไร้ส่วนติดต่อผู้ใช้ ช่วยให้นักพัฒนาสามารถเรียกใช้การทดสอบอัตโนมัติโดยไม่ต้องมีส่วนติดต่อผู้ใช้ที่มองเห็นได้ โดยการเรียกใช้การทดสอบในพื้นหลัง Selenium ช่วยประหยัดเวลาและทรัพยากร และยังช่วย...ping ระบุปัญหาที่อาจไม่ปรากฏชัดในสภาพแวดล้อมการทดสอบแบบ UI ดั้งเดิม ซึ่งรวมถึงปัญหาด้านประสิทธิภาพและเค้าโครงที่ปรากฏชัดเจนเฉพาะในสภาพแวดล้อมแบบไร้ส่วนหัว อย่างไรก็ตาม การสร้างสมดุลระหว่างการทดสอบแบบไร้ส่วนหัวกับการทดสอบแบบ UI ดั้งเดิมเป็นสิ่งสำคัญเพื่อให้มั่นใจได้ว่าครอบคลุมการทดสอบอย่างเต็มที่
ตัวอย่างยอดนิยมของเบราว์เซอร์ Headless
มีเบราว์เซอร์แบบไร้ส่วนหัวให้เลือกใช้มากมาย แต่ละแบบมีคุณสมบัติและข้อดีแตกต่างกัน ทำให้เหมาะสำหรับการใช้งานที่หลากหลาย เราจะกล่าวถึงเบราว์เซอร์เหล่านั้นในหัวข้อถัดไป
PhantomJS
ประกาศแจ้งเตือนการเลิกใช้งาน: การพัฒนา PhantomJS ได้หยุดลงในปี 2018 และโครงการนี้ไม่ได้รับการดูแลรักษาอีกต่อไป โครงการใหม่ควรเลือกใช้ Chrome แบบ headless แทน Firefoxหรือ นักเขียนบทละคร สำหรับการทำงานอัตโนมัติแบบไร้ส่วนหัวที่ทันสมัย ตัวอย่าง PhantomJS ด้านล่างนี้มีไว้เพื่อเป็นข้อมูลอ้างอิงเท่านั้น
PhantomJS เป็นเบราว์เซอร์แบบไร้ส่วนหัวที่ใช้ WebKit เป็นเอนจินในการเรนเดอร์ และรองรับมาตรฐานเว็บต่างๆ เช่น HTML5, CSS3 และอื่นๆ Javaสคริปต์นี้สามารถใช้สำหรับการจับภาพหน้าจอและการทำงานอัตโนมัติของหน้าเว็บ เป็นโอเพนซอร์สและใช้งานได้กับระบบปฏิบัติการหลายระบบ
ตัวอย่างของการ Selenium โดยมี 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()
Chrome
Chrome เป็นเบราว์เซอร์ที่ได้รับความนิยมมากที่สุดในโลกและมีโหมดไร้ส่วนหัว (headless mode) ให้ใช้งานด้วย สามารถใช้งานได้บนหลายแพลตฟอร์มและรองรับภาษาโปรแกรมและเฟรมเวิร์กยอดนิยม เครื่องมือดีบักในตัวและเอกสารประกอบที่ครอบคลุมทำให้ใช้งานง่ายและแก้ไขปัญหาที่อาจเกิดขึ้นระหว่างการทดสอบได้สะดวก
ตัวอย่าง Headless Chrome พร้อมด้วย 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 เป็นเว็บเบราว์เซอร์ยอดนิยมที่สามารถใช้เป็นเบราว์เซอร์แบบไร้ส่วนหัวสำหรับการทดสอบได้ ประโยชน์อย่างหนึ่งของการใช้เบราว์เซอร์นี้คือ... Firefox ข้อดีของเบราว์เซอร์แบบ Headless คือขนาดไฟล์ที่เล็ก ทำให้เป็นตัวเลือกที่หลากหลายสำหรับการทดสอบบนระบบปฏิบัติการต่างๆ เมื่อรวมกับเอกสารประกอบที่ครอบคลุมและการสนับสนุนจากชุมชนแล้ว Firefox เป็นตัวเลือกที่ยอดเยี่ยมสำหรับทีมที่กำลังทดลองใช้ระบบอัตโนมัติแบบเบราว์เซอร์ไร้ส่วนหัว
ตัวอย่างของ Headless Firefox สีสดสวย 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()
ข้อดีของการทดสอบเบราว์เซอร์ Headless
- การดำเนินการทดสอบที่รวดเร็วยิ่งขึ้น
- การทดสอบที่คุ้มค่า
- การครอบคลุมการทดสอบที่ดีขึ้น
- ความยืดหยุ่นในการทดสอบการทำงาน
- ผสานรวมเข้ากับไปป์ไลน์ CI/CD ได้ง่ายขึ้น
ข้อเสียของการทดสอบเบราว์เซอร์ Headless
- ขาดส่วนติดต่อผู้ใช้แบบกราฟิกที่มองเห็นได้สำหรับการตรวจสอบด้วยตนเอง
- การแก้ไขข้อผิดพลาดอาจทำได้ยากขึ้นหากไม่มีหน้าจอ
- การครอบคลุมพฤติกรรมเฉพาะเบราว์เซอร์มีจำกัด
HtmlUnitDriver
HtmlUnitDriver เป็นการใช้งานเบราว์เซอร์แบบ Headless ที่เบาที่สุดและเร็วที่สุดสำหรับ Selenium WebDriver เป็นเทคโนโลยีที่พัฒนาต่อยอดมาจาก HtmlUnit และเรียกอีกอย่างว่า... ไดร์เวอร์เบราว์เซอร์หัวขาดมันทำงานคล้ายกับ Chrome, IE หรือ Firefox ไดรเวอร์ตัวนี้ไม่มี GUI ดังนั้นจึงไม่สามารถมองเห็นผลการทดสอบบนหน้าจอได้ HtmlUnitDriver ยังคงได้รับการดูแลรักษาและเผยแพร่ต่อไป org.seleniumhq.selenium:htmlunit3-driver อาร์ติแฟกต์ Maven
คุณสมบัติของ HtmlUnitDriver:
- รองรับโปรโตคอล HTTPS และ HTTP
- รองรับการตอบสนองด้วย HTML (เช่น การคลิกลิงก์ การส่งแบบฟอร์ม การสำรวจโครงสร้าง DOM ของเอกสาร HTML และอื่นๆ)
- การสนับสนุนสำหรับคุกกี้
- รองรับพร็อกซีเซิร์ฟเวอร์
- รองรับการตรวจสอบสิทธิ์ขั้นพื้นฐานและ NTLM
- ของแข็ง Javaต้นฉบับ สนับสนุน
- รองรับวิธีการส่งข้อมูลแบบ GET และ POST
- ความสามารถในการปรับแต่งส่วนหัวคำขอที่ถูกส่งไปยังเซิร์ฟเวอร์
- ความสามารถในการควบคุมว่าการตอบสนองที่ล้มเหลวจากเซิร์ฟเวอร์ควรส่งข้อยกเว้นหรือส่งคืนเป็นหน้าเว็บประเภทที่เหมาะสม
ขั้นตอนการใช้งาน HtmlUnitDriver กับ Selenium
ขั้นตอน 1) In Eclipseคัดลอกโค้ดต่อไปนี้ เพิ่มมาตรฐาน Selenium เพิ่มไฟล์ไลบรารีลงในโปรเจ็กต์ ไม่จำเป็นต้องใช้ไฟล์ 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 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();
}
}
ขั้นตอน 2) เรียกใช้รหัส คุณจะสังเกตเห็นว่าไม่มีเบราว์เซอร์เปิดขึ้นมา และผลลัพธ์จะแสดงในคอนโซล
ข้อดีของ HtmlUnitDriver
- เนื่องจากไม่ได้ใช้ส่วนต่อประสานผู้ใช้แบบกราฟิก (GUI) การทดสอบจึงทำงานในพื้นหลังโดยไม่รบกวนการมองเห็น
- เมื่อเทียบกับอินสแตนซ์ไดรเวอร์อื่นๆ การประมวลผลจะเร็วกว่า
- นอกจากนี้ คุณยังสามารถจำลองเวอร์ชันเบราว์เซอร์ต่างๆ ได้เมื่อทำการทดสอบผ่าน HtmlUnitDriver
-
สามารถใช้งานได้บนทุกแพลตฟอร์มและง่ายต่อการเรียกใช้การทดสอบหลายๆ ครั้งพร้อมกัน เหมาะอย่างยิ่งสำหรับ โหลดการทดสอบ.
ข้อ จำกัด :
- มันไม่สามารถเลียนแบบได้อย่างสมบูรณ์ Javaพฤติกรรมการเขียนสคริปต์ของเอนจิ้นเบราว์เซอร์จริงทุกตัว
PhantomJS
คำเตือน: PhantomJS เลิกใช้งานแล้วและไม่มีการบำรุงรักษาอีกต่อไป สำหรับงานแบบ headless ใหม่ ให้ใช้... Selenium ด้วย Chrome ที่ไม่มีส่วนหัว หรือ Firefoxหรือย้ายไปที่หมวดนักเขียนบทละคร ส่วนด้านล่างนี้ใช้สำหรับการอ้างอิงในอดีตเท่านั้น
PhantomJS เป็นเบราว์เซอร์แบบไร้ส่วนหัว (headless browser) ที่มี... JavaScript API เดิมทีใช้สำหรับการทดสอบเว็บไซต์แบบ Headless การเข้าถึงและจัดการเว็บเพจ และมาพร้อมกับ DOM API มาตรฐาน
วิธีใช้ PhantomJS กับ Seleniumคุณต้องใช้ GhostDriver GhostDriver เป็นการนำโปรโตคอล WebDriver Wire มาใช้ในรูปแบบพื้นฐาน Javaสคริปต์สำหรับ PhantomJS
เวอร์ชันต่อๆ มาของ PhantomJS แบบบูรณาการ GhostDriver ดังนั้น ไม่จำเป็นต้องติดตั้งแยกต่างหาก
ระบบนี้ทำงานดังนี้:
ขั้นตอนการวิ่ง Selenium ด้วย PhantomJS
ขั้นตอน 1) คุณต้องการ Eclipse สีสดสวย Selenium การติดตั้ง
ขั้นตอน 2) ดาวน์โหลด PhantomJS Good Farm Animal Welfare Awards.
ขั้นตอน 3) Extracย้ายโฟลเดอร์ที่ดาวน์โหลดมาไปไว้ในโฟลเดอร์ Program Files
ขั้นตอน 4) ดาวน์โหลดไดรเวอร์ PhantomJS จาก Good Farm Animal Welfare Awardsเพิ่มไฟล์ JAR ลงในโปรเจ็กต์ของคุณ
ขั้นตอน 5) วางโค้ดต่อไปนี้ลงในช่อง 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();
}
}
ขั้นตอน 6) รันโค้ด คุณจะเห็นผลลัพธ์ในคอนโซล และจะไม่มีการเปิดเบราว์เซอร์ขึ้นมา
หมายเหตุ: ในการใช้งานครั้งแรก ขึ้นอยู่กับการตั้งค่าของคุณ คุณอาจเห็นคำเตือนด้านความปลอดภัยจาก Windows เพื่ออนุญาตให้ PhantomJS ทำงาน คลิก ช่วยให้การเข้าถึง.
องค์กรหลายแห่งได้ใช้ PhantomJS สำหรับงานต่างๆ มาอย่างยาวนาน เช่น:
- การทดสอบแบบไร้หัว
- จับภาพหน้าจอ
- การทำงานอัตโนมัติของหน้าเว็บ
- การตรวจสอบเครือข่าย
- แสดงภาพหน้าจอแดชบอร์ดให้ผู้ใช้ดู
- การรันการทดสอบหน่วยบนบรรทัดคำสั่ง
- การสร้างคู่มือพนักงานจากไฟล์ HTML เป็นไฟล์ PDF
- ใช้งานร่วมกับ QUnit สำหรับชุดทดสอบ
สำหรับงานใหม่ ให้แทนที่กรณีการใช้งาน PhantomJS เหล่านี้ด้วย Chrome แบบ Headless Firefoxหรือ Playwright ซึ่งได้รับการอัปเดตด้านความปลอดภัยและการแสดงผลอย่างต่อเนื่อง






