עד עכשיו הבנו כי יש לי את ממשק ה-API של ה-Webdriver שהוא יודע לדבר עם מגוון של דרייברים, לכל דפדפן הדרייבר שלו. בשיעור זה נלמד על דרייבר ששונה במהותו מהבחינה התפיסתית מכל השאר, זהו ה- HtmlUnitDriver.

אם chromedriver עובד מול דפדפן הכרום וה-iedriver עובד מול דפדפן האקספלורר , ניתן להגיד כי ה-HtmlUnitDriver עובד על Headless Browser.

ה-Headless Browser הוא למעשה מונח הבא לתאר דפדפן ללא GUI , מה שקורה בפועל, פקודות נשלחות אליו כמו אל כל דפדפן אחר דרך הדרייבר שלו , הוא מפרש אותן ומחזיר את תשובה וזאת מבלי שנראה כלום (כאמור אין לו GUI), כך שניתן לאמר כי ה-Headless Browser הינו למעשה סימולטור של דפדפן עליו ניתן להריץ בדיקות סימולציה.

למה שאשתמש בו ? היתרון הגדול ביותר שלו הוא המהירות, מכיוון שאין פה באמת דפדפן אלא רק סימולטור של דפדפן, מהירות הפקודות שנעביר אליו ונקבל בחזרה ממנו תהיה מהירה פי כמה וכמה משאר האלטרנטיבות, עד עכשיו לבטח כבר הספקתם לראות כמה זמן לוקח לסלניום לפתוח את הדפדפן, כמה שניות טובות, ב-Headless Browser זה ייקח כמה עשיריות או מאיות השנייה.

מתי אשתמש בו ? זהו כלי מצויין לשימוש על ידי מפתחי המוצר. נגיד שאחד מהמפתחים עבד על איזה פיצ'ר חדש במוצר או אפילו תיקן באג באיזור מסוכן בקוד, עם ה-Headless Browser תהיה לו את היכולת להריץ סט של בדיקות (נגיד Sanity) במהירות עוד לפני שהוא עושה Check in לקוד.

שימוש נוסף יהיה במידה וארצה לכתוב איזו פונקציה ובה ארצה להיכנס למספר דפים ולשלוף מהם מידע מסויים, עכשיו לא באמת מעניין אותי איך הדפים בנויים, כיצד הם נראים ומה עומד מאחורי קבצי העיצוב שלהם (css), לכן אין במקרה זה שום סיבה לפתוח את הדפדפן, אוכל לעשות זאת דרך ה-Headless Browser אשר יקרא את הדפים ויפרש אותם פחות או יותר כמו הדפדפן רק בעשירית (אולי פחות) מהזמן.

גם במידה ונרצה לעבוד במקביל על כמה דפדפנים או על כמה גרסאות שונות של אותו הדפדפן, האופציה הקלה והמהירה תהיה לעבוד עם Headless Browser.

במידה ונרצה לעבוד עם דפדפן אמיתי, ישנם כמה פתרונות כמו כלים מסחריים או עבודה עם סלניום Grid עליו ניתן לקרוא בפוסט אחר פה באתר.

אך בכל זאת, עם כל הכבוד לסימולטור הזה, עדיין לא נרצה להריץ את שלל הבדיקות שלנו עליו, כי אחרי הכל הוא… בכל זאת… סימולטור. ניקח למשל את ה-Java Script, טכנולוגיה סופר פופלרית המצוייה כמעט בכל מוצר שנבדוק, איפה הבעיה ? שכל דפדפן מפרש את ה-JavaScript באופן שונה במקצת, כך שבדיקה אמיתית צריכה להיות על דפדפן ולא על סימולטור כמו ה-Headless Browser שאגב משתמש במנוע JS שנקרא – Rhino (עד כמה שידוע לי אף דפדפן אמיתי לא משתמש במנוע זה, גם לא פיירפוקס, למרות ששניהם באים מבית מוזילה).

כמו שכבר נכתב, סלניום תומכים בטכנולוגית ה-Headless Browser דרך מחלקה מיוחדת שנקראת : HtmlUnitDriver, מחלקה זו היא אימפלמנטציה ג'אוואית.

 

אז בואו נראה כיצד אנו ממשים אותה דרך ה-Webdriver, תחילה נאתחל אותה כמו כל דרייבר אחר:

HtmlUnitDriver unitDriver = new HtmlUnitDriver();

וכעת נוכל לעבוד עם האובייקט unitDriver בדיוק כמו שעבדנו עם ה-driver הרגיל שלנו (מפתחי ה-Webdriver דאגו לנו לחיים קלים), נגלוש לכתובת מסויימת, נכניס טקסט, נקיש על כפתור וכו' , הרי דוגמת קוד:

HtmlUnitDriver unitDriver = new HtmlUnitDriver();
unitDriver.get("http://blog.yoniflenner.net");
WebElement searchElement = unitDriver.findElement(By.name("s"));        // שורת החיפוש באתר
searchElement.sendKeys("Selenium");                                     // הכנסת הערך
WebElement button = unitDriver.findElement(By.id("searchsubmit"));  // הגדרת כפתור החיפוש
button.click();                                                     // לחיצה על הכפתור
 
System.out.println("Title of this page is: " + unitDriver.getTitle());

התוצאה על המסך תהיה:

 Title of this page is: Selenium | העולם הטכנולוגי שלי

 

בדיקה על סביבות שונות:

כמו שכבר נכתב, אחד השימושים של Headless Browser הוא היכולת להריץ במקביל על כמה סביבות (דפדפנים \ גרסאות של דפדפנים), ה-HtmlUnitDriver מאפשר לנו לבחור בצורה מאוד פשוטה על מה להריץ , כפי שנוכל לראות בדוגמא:

import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import com.gargoylesoftware.htmlunit.BrowserVersion;
 
public class HeadlesBrowserClass
{ 
   public static void main(String[] args) throws InterruptedException
   { 
      HtmlUnitDriver unitDriverFirefox = new HtmlUnitDriver(BrowserVersion.FIREFOX_35);
      // -- or --
      HtmlUnitDriver unitDriverIE = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_11);
   }
}

מה ראינו פה ? איתחול HtmlUnitDriver ויצירת מופעים, אחד של דפדפן מסוג פיירפוקס גרסה 35, השני של דפדפן מסוג אינטרנט אקספלורר גרסה 11. האובייקטים הללו מגיעים למעשה מ-package של com.gargoylesoftware.htmlunit.BrowserVersion , לכן גם קישרנו אותם בתחילת התוכנית.

 

שימוש ב-JavaScript:

אמנם קצת מקדימים את זמננו, שימוש של סלניום עם JavaScript נלמד בהרחבה בשיעור הבא (שיעור 19) , אך אי אפשר שלא לציין זאת כאן. כברירת מחדל ה-HtmlUnitWebDriver אינה מאפשרת שימוש ב-JavaScript. בשביל לעבוד עם JS נוכל לבצע את אחת מ-2 הדרכים , האחת להעביר את הדגל של JS Enable ל-Contractor כך:

HtmlUnitDriver unitDriver = new HtmlUnitDriver(true);

השנייה, להשתמש במתודת SetJavaSriptEnable , כך:

HtmlUnitDriver unitDriver = new HtmlUnitDriver();
unitDriver.setJavascriptEnabled(true);

 

כעת נוכל להשתמש באיזה סקריפט שנרצה בתוך תוכנית ה-Webdriver שלנו, לדוגמא (החזרת שם האתר שלנו):

HtmlUnitDriver unitDriver = new HtmlUnitDriver();
unitDriver.setJavascriptEnabled(true);
unitDriver.get("http://blog.yoniflenner.net");
String domainName = (String) unitDriver.executeScript("return document.domain");
System.out.println("Domain name is " + domainName);

 


arrowBack arrowMainarrowFor

השאר הערה\הודעה