HTMLUnitDriver trong Selenium
Trรฌnh duyแปt khรดng giao diแปn (headless browser) lร trรฌnh duyแปt web khรดng cรณ giao diแปn ngฦฐแปi dรนng ฤแป hแปa. Nรณ cรณ thแป chแบกy ngแบงm mร khรดng cแบงn hiแปn thแป hรฌnh แบฃnh.tracNรณ cung cแบฅp mแปt cรกch hiแปu quแบฃ ฤแป kiแปm thแปญ cรกc แปฉng dแปฅng web ฤแปng thแปi tiแบฟt kiแปm thแปi gian vร tร i nguyรชn. Trong hฦฐแปng dแบซn nร y, chรบng ta sแบฝ tรฌm hiแปu trรฌnh duyแปt khรดng giao diแปn lร gรฌ, khi nร o nรชn sแปญ dแปฅng kiแปm thแปญ trรฌnh duyแปt khรดng giao diแปn vร cรกch thแปฑc hiแปn nรณ. Selenium.
Trรฌnh duyแปt khรดng ฤแบงu lร gรฌ?
Trรฌnh duyแปt khรดng ฤแบงu lร trรฌnh duyแปt web khรดng cรณ giao diแปn ngฦฐแปi dรนng ฤแป hแปa. Chฦฐฦกng trรฌnh nร y sแบฝ hoแบกt ฤแปng giแปng nhฦฐ mแปt trรฌnh duyแปt nhฦฐng sแบฝ khรดng hiแปn thแป bแบฅt kแปณ GUI nร o.
Mแปt sแป vรญ dแปฅ vแป Trรฌnh ฤiแปu khiแปn khรดng ฤแบงu bao gแปm
- ฤฦกn vแป Html
- Ma
- PhantomJS
- ZombieJS
- Watir-webdriver
Khi nร o nรชn sแปญ dแปฅng kiแปm tra trรฌnh duyแปt khรดng ฤแบงu?
Trong thแปi ฤแบกi kแปน thuแบญt sแป ngร y nay, cรกc แปฉng dแปฅng web ฤฦฐแปฃc phรกt triแปn ฤแป tฦฐฦกng thรญch vแปi nhiแปu thiแบฟt bแป vร nแปn tแบฃng khรกc nhau. ฤiแปu nร y thฦฐแปng ฤแบทt ra thรกch thแปฉc cho cรกc nhร phรกt triแปn trang web, nhแปฏng ngฦฐแปi cแบงn ฤแบฃm bแบฃo cรกc แปฉng dแปฅng cแปงa hแป hoแบกt ฤแปng liแปn mแบกch trรชn cรกc nแปn tแบฃng nร y. Kiแปm thแปญ trรฌnh duyแปt khรดng ฤแบงu lร giแบฃi phรกp lรฝ tฦฐแปng cho vแบฅn ฤแป nร y vรฌ nรณ cho phรฉp cรกc nhร phรกt triแปn kiแปm thแปญ cรกc แปฉng dแปฅng web cแปงa hแป mร khรดng cแบงn giao diแปn ngฦฐแปi dรนng ฤแป hแปa. Bแบฑng cรกch sแปญ dแปฅng kiแปm thแปญ trรฌnh duyแปt khรดng ฤแบงu, cรกc nhร phรกt triแปn cรณ thแป dแป dร ng kiแปm thแปญ cรกc แปฉng dแปฅng web phแปฉc tแบกp vแปi nhiแปu thร nh phแบงn vร phแปฅ thuแปc, mแป ฤฦฐแปng cho quรก trรฌnh phรกt triแปn nhanh hฦกn, mรฃ khรดng cรณ lแปi vร ngฦฐแปi dรนng hร i lรฒng.
Kiแปm tra trรฌnh duyแปt khรดng ฤแบงu vแปi Selenium
Selenium lร mแปt cรดng cแปฅ mแบกnh mแบฝ ฤแป kiแปm tra trรฌnh duyแปt khรดng cรณ giao diแปn ngฦฐแปi dรนng, cho phรฉp cรกc nhร phรกt triแปn chแบกy cรกc bร i kiแปm tra tแปฑ ฤแปng mร khรดng cแบงn giao diแปn ngฦฐแปi dรนng cรณ thแป nhรฌn thแบฅy. Bแบฑng cรกch chแบกy cรกc bร i kiแปm tra แป chแบฟ ฤแป nแปn, Selenium cรณ thแป tiแบฟt kiแปm thแปi gian vร nguแปn lแปฑc ฤแปng thแปi giรบp รญchping Xรกc ฤแปnh cรกc vแบฅn ฤแป cรณ thแป khรดng rรต rร ng trong mรดi trฦฐแปng kiแปm thแปญ dแปฑa trรชn giao diแปn ngฦฐแปi dรนng truyแปn thแปng. ฤiแปu nร y bao gแปm cรกc vแบฅn ฤแป liรชn quan ฤแบฟn hiแปu suแบฅt vร cรกc vแบฅn ฤแป vแป bแป cแปฅc mร chแป cรณ thแป trแป nรชn rรต rร ng trong mรดi trฦฐแปng khรดng cรณ giao diแปn ngฦฐแปi dรนng. Tuy nhiรชn, ฤiแปu quan trแปng lร phแบฃi ghi nhแป nhแปฏng hแบกn chแบฟ cแปงa kiแปm thแปญ khรดng cรณ giao diแปn ngฦฐแปi dรนng vร cรขn bแบฑng nรณ vแปi cรกc phฦฐฦกng phรกp dแปฑa trรชn giao diแปn ngฦฐแปi dรนng truyแปn thแปng ฤแป ฤแบฃm bแบฃo phแบกm vi kiแปm thแปญ toร n diแปn.
Cรกc vรญ dแปฅ phแป biแบฟn vแป trรฌnh duyแปt khรดng ฤแบงu
Cรณ rแบฅt nhiแปu trรฌnh duyแปt khรดng cรณ giao diแปn ngฦฐแปi dรนng, mแปi trรฌnh duyแปt cรณ cรกc tรญnh nฤng vร lแปฃi รญch riรชng, khiแบฟn chรบng phรน hแปฃp vแปi cรกc trฦฐแปng hแปฃp sแปญ dแปฅng khรกc nhau. Chรบng tรดi thแบฃo luแบญn vแป chรบng dฦฐแปi ฤรขy: -
PhantomJS
PhantomJS lร mแปt trรฌnh duyแปt khรดng cรณ giao diแปn ngฦฐแปi dรนng sแปญ dแปฅng WebKit lร m cรดng cแปฅ kแบฟt xuแบฅt vร hแป trแปฃ nhiแปu tiรชu chuแบฉn web khรกc nhau nhฦฐ HTML5, CSS3 vร JavaScript. Cรณ thแป dรนng ฤแป chแปฅp mร n hรฌnh vร tแปฑ ฤแปng hรณa cรกc tรกc vแปฅ trang. Script lร mรฃ nguแปn mแป vร tฦฐฦกng thรญch vแปi nhiแปu hแป ฤiแปu hร nh.
Vรญ dแปฅ vแป Selenium vแปi PhantomJS khรดng ฤแบงu trong 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()
cฦก rรดm
Chrome lร trรฌnh duyแปt phแป biแบฟn nhแบฅt trรชn hร nh tinh vร cลฉng cung cแบฅp tรญnh nฤng khรดng cรณ giao diแปn ngฦฐแปi dรนng. Nรณ cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng trรชn nhiแปu nแปn tแบฃng vร hแป trแปฃ cรกc ngรดn ngแปฏ vร khung lแบญp trรฌnh. Cรกc cรดng cแปฅ gแปก lแปi tรญch hแปฃp vร tร i liแปu mแป rแปng giรบp bแบกn dแป dร ng sแปญ dแปฅng vร khแบฏc phแปฅc mแปi sแปฑ cแป cรณ thแป phรกt sinh trong quรก trรฌnh thแปญ nghiแปm.
Vรญ dแปฅ vแป Chrome khรดng ฤแบงu vแปi 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 lร mแปt trรฌnh duyแปt web phแป biแบฟn cลฉng cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng lร m trรฌnh duyแปt khรดng cรณ giao diแปn ngฦฐแปi dรนng cho mแปฅc ฤรญch thแปญ nghiแปm. Mแปt trong nhแปฏng lแปฃi รญch cแปงa viแปc sแปญ dแปฅng Firefox Lร mแปt trรฌnh duyแปt khรดng cรณ giao diแปn ngฦฐแปi dรนng nรชn tรญnh chแบฅt nhแบน cแปงa nรณ khiแบฟn nรณ trแป thร nh mแปt lแปฑa chแปn linh hoแบกt ฤแป thแปญ nghiแปm trรชn nhiแปu hแป ฤiแปu hร nh khรกc nhau. Ngoร i ra, vแปi tร i liแปu phong phรบ vร sแปฑ hแป trแปฃ cแปงa cแปng ฤแปng, Firefox lร sแปฑ lแปฑa chแปn tuyแปt vแปi cho nhแปฏng ai muแปn thแปญ nghiแปm cรดng nghแป trรฌnh duyแปt khรดng ฤแบงu.
Vรญ dแปฅ vแป khรดng ฤแบงu Firefox vแปi 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()
ฦฏu ฤiแปm cแปงa viแปc kiแปm tra trรฌnh duyแปt khรดng ฤแบงu
- Thแปฑc hiแปn kiแปm tra nhanh hฦกn
- Thแปญ nghiแปm hiแปu quแบฃ vแป chi phรญ
- Phแบกm vi kiแปm tra tแปt hฦกn
- Tรญnh linh hoแบกt trong viแปc chแบกy thแปญ nghiแปm
- Tรญch hแปฃp vแปi ฤฦฐแปng แปng CI/CD
Nhฦฐแปฃc ฤiแปm cแปงa viแปc kiแปm tra trรฌnh duyแปt khรดng ฤแบงu
- Thiแบฟu GUI
- Khรณ khฤn trong viแปc gแปก lแปi
- Hแป trแปฃ trรฌnh duyแปt hแบกn chแบฟ
Trรฌnh ฤiแปu khiแปn HTMLUnit
HTML UnitDriver lร trรฌnh duyแปt khรดng ฤแบงu triแปn khai nhanh nhแบฅt vร nhแบน nhแบฅt dร nh cho WebDriver. Nรณ dแปฑa trรชn HtmlUnit. Nรณ ฤฦฐแปฃc biแบฟt ฤแบฟn nhฦฐ Trรฌnh ฤiแปu khiแปn trรฌnh duyแปt khรดng ฤแบงu. Nรณ giแปng nhฦฐ Chrome, IE hoแบทc FireFox trรฌnh ฤiแปu khiแปn, nhฦฐng nรณ khรดng cรณ GUI nรชn ngฦฐแปi ta khรดng thแป thแบฅy quรก trรฌnh thแปฑc hiแปn kiแปm tra trรชn mร n hรฌnh.
Cรกc tรญnh nฤng cแปงa trรฌnh ฤiแปu khiแปn ฤฦกn vแป HTML
- Hแป trแปฃ cรกc giao thแปฉc HTTPS vร HTTP
- Hแป trแปฃ phแบฃn hแปi HTML (nhแบฅp vร o liรชn kแบฟt, gแปญi biแปu mแบซu, xem mรด hรฌnh DOM cแปงa tร i liแปu HTML, v.v.)
- Hแป trแปฃ cookie
- Hแป trแปฃ mรกy chแปง proxy
- Hแป trแปฃ xรกc thแปฑc cฦก bแบฃn vร NTLM
- Xuแบฅt sแบฏc JavaScript hแป trแปฃ
- Hแป trแปฃ cรกc phฦฐฦกng thแปฉc gแปญi GET vร POST
- Khแบฃ nฤng tรนy chแปnh cรกc tiรชu ฤแป yรชu cแบงu ฤฦฐแปฃc gแปญi ฤแบฟn mรกy chแปง
- Khแบฃ nฤng xรกc ฤแปnh xem cรกc phแบฃn hแปi khรดng thร nh cรดng tแปซ mรกy chแปง sแบฝ ฤฦฐa ra ngoแบกi lแป hay sแบฝ ฤฦฐแปฃc trแบฃ vแป dฦฐแปi dแบกng cรกc trang thuแปc loแบกi thรญch hแปฃp
Cรกc bฦฐแปc sแปญ dแปฅng Trรฌnh ฤiแปu khiแปn HTMLUnit vแปi Selenium
Bฦฐแปc 1) In Eclipse, sao chรฉp mรฃ sau. Thรชm cรกc tแปp thฦฐ viแปn selenium chuแบฉn vร o dแปฑ รกn. Khรดng cแบงn thรชm tแปp jar nร o nแปฏa.
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();
}
}
Bฦฐแปc 2) Chแบกy mรฃ. Bแบกn sแบฝ quan sรกt thแบฅy khรดng cรณ trรฌnh duyแปt nร o ฤฦฐแปฃc khแปi chแบกy vร kแบฟt quแบฃ ฤฦฐแปฃc hiแปn thแป trong bแบฃng ฤiแปu khiแปn.
Lแปฃi รญch cแปงa Trรฌnh ฤiแปu khiแปn ฤฦกn vแป Html:
- Vรฌ nรณ khรดng sแปญ dแปฅng bแบฅt kแปณ GUI nร o ฤแป kiแปm tra nรชn cรกc bร i kiแปm tra cแปงa bแบกn sแบฝ chแบกy แป chแบฟ ฤแป nแปn mร khรดng cรณ bแบฅt kแปณ giรกn ฤoแบกn trแปฑc quan nร o
- So vแปi tแบฅt cแบฃ cรกc phiรชn bแบฃn khรกc, viแปc thแปฑc thi nhanh hฦกn
- ฤแป chแบกy thแปญ nghiแปm thรดng qua trรฌnh ฤiแปu khiแปn HtmlUnit, bแบกn cลฉng cรณ thแป chแปn cรกc phiรชn bแบฃn trรฌnh duyแปt khรกc
-
Nรณ ฤแปc lแบญp vแปi nแปn tแบฃng vร dแป dร ng hฦกn ฤแป chแบกy nhiแปu thแปญ nghiแปm ฤแปng thแปi. Lรฝ tฦฐแปng cho Kiแปm tra Tแบฃi.
Hแบกn chแบฟ:
- Nรณ khรดng thแป mรด phแปng cรกc trรฌnh duyแปt khรกc JavaHร nh vi kแปch bแบฃn
PhantomJS
PhantomJS lร mแปt trรฌnh duyแปt khรดng cรณ ฤแบงu vแปi JavaScript API. ฤรขy lร giแบฃi phรกp tแปi ฦฐu cho viแปc Kiแปm tra trang web khรดng cรณ giao diแปn, truy cแบญp vร thao tรกc cรกc trang web vร ฤi kรจm vแปi DOM API chuแบฉn.
ฤแป sแปญ dแปฅng PhantomJS vแปi Seleniun, ngฦฐแปi ta phแบฃi sแปญ dแปฅng GhostDriver. GhostDriver lร viแปc triแปn khai giao thแปฉc Webdriver Wire trong JS ฤฦกn giแบฃn cho PhantomJS.
Phiรชn bแบฃn mแปi nhแบฅt cแปงa PhatomJS ฤรฃ tรญch hแปฃp GhostDriver vร khรดng cแบงn phแบฃi cร i ฤแบทt riรชng.
ฤรขy lร cรกch hแป thแปng hoแบกt ฤแปng-
Cรกc bฦฐแปc ฤแป chแบกy Selenium vแปi PhatomJS
Bฦฐแปc 1) Bแบกn cแบงn Eclipse vแปi Selenium cร i ฤแบทt
Bฦฐแปc 2) Tแบฃi xuแปng PhantomJS ฤรขy
Bฦฐแปc 3) ExtracSao chรฉp thฦฐ mแปฅc ฤรฃ tแบฃi xuแปng vร o thฦฐ mแปฅc Program Files.
Bฦฐแปc 4) Tแบฃi xuแปng Trรฌnh ฤiแปu khiแปn PhantomJS tแปซ ฤรขy. Thรชm bรฌnh vร o dแปฑ รกn cแปงa bแบกn
Bฦฐแปc 5) Dรกn ฤoแบกn mรฃ sau vร o 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();
}
}
Bฦฐแปc 6) Chแบกy mรฃ. Bแบกn sแบฝ quan sรกt kแบฟt quแบฃ ฤแบงu ra ฤฦฐแปฃc hiแปn thแป trong bแบฃng ฤiแปu khiแปn vร khรดng cรณ trรฌnh duyแปt nร o ฤฦฐแปฃc khแปi chแบกy.
LฦฏU ร: แป lแบงn chแบกy ฤแบงu tiรชn, dแปฑa trรชn cร i ฤแบทt cแปงa bแบกn, bแบกn cรณ thแป nhแบญn ฤฦฐแปฃc cแบฃnh bรกo bแบฃo mแบญt tแปซ Windows ฤแป cho phรฉp chแบกy PhantomJS. Bแบฅm vร o Cho phรฉp truy cแบญp.
Nhiแปu tแป chแปฉc sแปญ dแปฅng Phantom.JS cho nhiแปu mแปฅc ฤรญch khรกc nhau, chแบณng hแบกn nhฦฐ
- Thแปญ nghiแปm khรดng ฤแบงu
- Chแปฅp mร n hรฌnh
- Tแปฑ ฤแปng hรณa trang
- Giรกm sรกt mแบกng
- ฤแป hiแปn thแป แบฃnh chแปฅp mร n hรฌnh trang tแปng quan cho ngฦฐแปi dรนng cแปงa hแป
- ฤแป chแบกy thแปญ nghiแปm ฤฦกn vแป trรชn dรฒng lแปnh
- ฤแป tแบกo sแป tay nhรขn viรชn tแปซ HTML sang PDF
- Kแบฟt hแปฃp vแปi QUnit cho bแป thแปญ nghiแปm
Tแปng kแบฟt
ฤแป kiแปm tra แปฉng dแปฅng nhanh chรณng trรชn nhiแปu trรฌnh duyแปt khรกc nhau vร khรดng cรณ bแบฅt kแปณ giรกn ฤoแบกn trแปฑc quan nร o, trรฌnh duyแปt khรดng ฤแบงu Kiแปm tra ฤฦฐแปฃc sแปญ dแปฅng. Do tแปc ฤแป, ฤแป chรญnh xรกc vร cรกc tรญnh nฤng dแป truy cแบญp, trรฌnh ฤiแปu khiแปn ฤฦกn vแป HTML vร PhantomJS ฤang ngร y cร ng phแป biแบฟn trong thแปญ nghiแปm tแปฑ ฤแปng hรณa trรฌnh duyแปt khรดng ฤแบงu. Bแบฑng cรกch lร m theo mแปt sแป bฦฐแปc ฤฦกn giแบฃn, bแบกn sแบฝ biแบฟt ฤฦฐแปฃc cรกc cรดng cแปฅ nร y cรณ thแป dแป dร ng tรญch hแปฃp vแปi cรกc cรดng cแปฅ khรกc nhฦฐ thแบฟ nร o vร cรณ thแป thแปฑc thi mรฃ thแปญ nghiแปm.






