בשיעור הקודם למדנו ממשק חשוב מאוד של סלניום, אולי החשוב מכולם, החיבור עם JavaScript. בשיעור זה נלמד דוגמא אחת מה ניתן לעשות עם הרצת JS בתוך קוד הסלניום שלנו.

עבודה עם ה-Storage הוא נושא מאוד חשוב לבדיקות אוטומטיות וידניות בכלל. בעזרת storage מקומי , אפליקציות web מסוגלות לאגור נתונים מקומית על הדפדפן וחוסכת את התלות בתקשורת עם השרת וה-DB המרכזי (כמובן שלא את כל המידע נשמור למקומית, ישנם דברים שחייבים לשמור ב-DB המרכזי). היתרונות הגדולים הם ביצועים מהירים יותר ואבטחה טובה יותר.

לפני יציאת טכנולוגיית HTML5 לאוויר העולם, עיקר שמירת הנתונים התבצע על cookies , מה שהגביל מאוד בעבודה עם קבצי העוגיות (שאגב גם כיום מאוד פופולרי לעבוד איתם) זה גודל המידע שניתן לשמור ואיך ניתן לשמור את המידע , cookies תומכים רק ב-strings.

HTML5 הביא עימו בשורה בנושא זה עם 2 גישות של שמירת נתונים מקומית: Local Storage ו-Session Storage. גישות אלו הן למעשה API ונבדלות ביניהן רק בזמן אורך החיים שלהם. ה-Session Storage יחיה (זאת אומרת הנתונים עליו ישמרו) כל עוד ה-session של הדפדפן יהיה פתוח, ברגע שנסגור את הדפדפן, יהיה זה סופו של ה-Session Storage גם כן. לעומת זאת , ה-Local Storage יחיה כל עוד אנחנו או המשתמש לא נהרוג אותו.

בואו ניקח דוגמא בה אנחנו בונים דף HTML לכניסה למערכת, יש לי שם משתמש וסיסמא. מטעמי בטחון ארצה להשתמש פה ב-Session Storage , אך אם במקרה אחר נרצה לשמור נתונים על המשתמש , כדאי לנו להשתמש ב-Local Storage . חשוב לציין כי ברגע שנבצע פעולה של Clear Cache בדפדפן, כל הנתונים יימחקו לנו מה-Storage.

אוקיי, אז עכשיו שאנו יודעים מהו storage בואו נראה כיצד אנו יכולים לעבוד איתו עם ה-Webdriver , כמו שכבר הזכרתי, בשביל להגיע אל ה-Storage נצטרך להשתמש ב-JavaScriptExecuter.

אופן הפעולות בין 2 הגישות דומה כמעט לחלוטין , ההבדל היחיד הוא בקריאה: window.sessionStorage לעומת window.localStorage. בוא נראה דוגמא בקוד:

Session Storage:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
 
public class SessionStorage
{
   private JavascriptExecutor js;
 
   public SessionStorage(WebDriver driver)
   {
      this.js = (JavascriptExecutor) driver;
   }
 
   // להסיר אלמנט
   public void removeItemFromSessionStorage(String item)
   {
      js.executeScript(String.format(
      "window.sessionStorage.removeItem('%s');", item));
   }
 
   // בדיקה האם אלמנט נמצא בפנים
   public boolean isItemPresentInSessionStorage(String item)
   {
      if (js.executeScript(String.format(
      "return window.sessionStorage.getItem('%s');", item)) == null)
         return false;
      else
         return true;
   }
 
   // שליפת אלמנט
   public String getItemFromSessionStorage(String key)
   {
      return (String) js.executeScript(String.format(
      "return window.sessionStorage.getItem('%s');", key));
   }
 
   public String getKeyFromSessionStorage(int key)
   {
      return (String) js.executeScript(String.format(
      "return window.sessionStorage.key('%s');", key)); 
   }
 
   // שליפת אורך האיחסון
   public Long getSessionStorageLength()
   {
   return (Long) js.executeScript("return window.sessionStorage.length;");
   }
 
   // הכנסת אלמנט
   public void setItemInSessionStorage(String item, String value)
   {
      js.executeScript(String.format( "window.sessionStorage.setItem('%s','%s');", item, value));
   }
 
   // מחיקת התוכן
   public void clearSessionStorage()
   {
   js.executeScript(String.format("window.sessionStorage.clear();"));
   }
}

 

Local Storage:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
 
public class LocalStorage
{
   private JavascriptExecutor js;
 
   public LocalStorage(WebDriver driver)
   {
      this.js = (JavascriptExecutor) driver;
   }
 
   // להסיר אלמנט
   public void removeItemFromLocalStorage(String item)
   {
      js.executeScript(String.format(
      "window.localStorage.removeItem('%s');", item));
   }
 
   // בדיקה האם אלמנט נמצא בפנים
   public boolean isItemPresentInLocalStorage(String item)
   {
      if (js.executeScript(String.format(
      "return window.localStorage.getItem('%s');", item)) == null)
         return false;
      else
         return true;
   }
 
   // שליפת אלמנט
   public String getItemFromLocalStorage(String key)
   {
      return (String) js.executeScript(String.format(
      "return window.localStorage.getItem('%s');", key));
   }
 
   public String getKeyFromLocalStorage(int key)
   {
      return (String) js.executeScript(String.format(
      "return window.localStorage.key('%s');", key)); 
   }
 
   // שליפת אורך האיחסון
   public Long getLocalStorageLength()
   {
   return (Long) js.executeScript("return window.localStorage.length;");
   }
 
   // הכנסת אלמנט
   public void setItemInLocalStorage(String item, String value)
   {
      js.executeScript(String.format( "window.localStorage.setItem('%s','%s');", item, value));
   }
 
   // מחיקת התוכן
   public void clearLocalStorage()
   {
   js.executeScript(String.format("window.localStorage.clear();"));
   }
}

 

וכמובן שלא נזניח את השימוש ב-Cookies:

driver.get("http://blog.yoniflenner.net");

Cookie cookie = new Cookie("key", "value");    // שלב ההגדרה
driver.manage().addCookie(cookie);

Set allCookies = driver.manage().getCookies(); // הכנסת כל העוגיות מהאתר
for (Cookie loadedCookie : allCookies)         // מעבר על כולם והדפסתם על המסך
{
    System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));
}

driver.manage().deleteCookieNamed("CookieName"); // Name מחיקה על פי ה
driver.manage().deleteCookie(loadedCookie);      // Cookie מחיקה על פי ה
driver.manage().deleteAllCookies();              // למחוק את הכל

 

 


arrowBackarrowMainarrowFor

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