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

סלניום למעשה זוהי סוויטת מוצרים הנותנת פתרון לבדיקות אוטומטיות על גביי דפדפנים, סוויטה זו תומכת בכל הדפדפנים הגדולים (Safari, Chrome, Firefox, IE) ומגוון שפות תכנות: C#, Java, Python, Rubi, PHP, Objective C ועוד,  וכמו כן תומכת בכל גרסות windows החל מ-winXP וכן Ubunto (לינוקס) , MacOS (רק בגרסת Appium)

כל המודולים המרכיבים את סלניום הינם חינמיים , תחת רשיון Open Source. ב-2004 היה זה ה- Selenium IDE אשר פותח ראשון מבין שאר המודולים ע"י ג'ייסון האגינס, כשנה אחריו הצטרף גם פול האמאנט (Paul Hammant) לכתוב את ה-RC.

בשנת 2009 , כשנתיים אחרי שג'ייסון האגינס הצטרף לעבוד בגוגל, הוא וחבריו לצוות הקימו את ה-Selenium Webdriver.

ה-Selenium Grid הצטרף לחבורה כשנה לפני ה-Webdriver , ב-2008, כאשר פיליפ האנריגו (Philippe Hanrigou) – עובד חברת ThoughtWorks (כמו גם האגינס והאמאנט) כתב נתב אשר יודע להריץ את הבדיקות על סביבות שונות במקביל.

 


Selenium IDE:

(Integrated Development Environment) זהו כלי אוטומציה המגיע בצורתו כתוסף (Extension) לדפדפן הפיירפוקס, הוא פשוט להבנה ועבודה, מהיר להטמעה ויעיל להבאת תוצאות מהירות, בעזרת כלי זה ניתן להקליט ולנגן תסריטי בדיקה המבוצעים על הדפדפן, כמו כן ניתן עימו גם לדבג את התסריטים, לערוך אותם לעבוד עם פרמטרים, לבצע בדיקות ווריפיקציה ועוד.

ה-IDE  שפותח על ידי Shinya Kasatani ונתרם לטובת פרוייקט הסלניום בשנת 2006 , הוא כלי חינמי (כמו כל שאר מוצרי Selenium) , הוא יכול לרוץ על שלושת מערכות ההפעלה הגדולות – Windows, OSX, Linux.

הכלי תומך במגוון רחב של שפות תכנות כמו: Java, Python, Ruby, Perl, C# , PHP

היתרון הגדול של ה-IDE על פני שאר מוצרי Selenium הוא שהכלי אינו דורש ידע מוקדם בתכנות קוד דרך הקלטות וניגונים של פעולות מסויימות אותם אנו מבצעים על הדפדפן, אך כמובן שיש לכך חיסרון עצום לפרוייקטים עתירי בדיקות, הקלטות, שלא כמו קוד, קשה מאוד לשנות ותחזוקתם תהיה סיוט לכל אחד שינסה להרכיב מערך בדיקות הכולל יותר כמה תסריטים בודדים.

 

דוגמא לממשק ה-IDE ניתן לראות כאן: (מקור: http://docs.seleniumhq.org/selenium-ide.png)

selenium-ide

ניתן לראות בדף הממשק כי הקליטו טסט ודבר ראשון פתחו את דפדפן הפיירפוקס, עם הכתובת של גוגל, בשלב השני  הכניסו את הערך  selenium ide לשדה החיפוש, הקישו על כפתור ה"חפש" ולבסוף אימתו את כתובת האתר שהופיע בדף התוצאות כי היא שווה ל- selenium-ide.openqa.org

 

לקריאה מעמיקה יותר אודות התקנה ועבודה עם Selenium IDE , הקישו כאן

 


Selenium RC / Selenium 1.0:

או בשמו הלא פורמלי – Selenium 1 הוא הגרסה הראשונה (והלא נתמכת יותר).

ה-Remote Control הוא שרת המקבל פקודות לדפדפן דרך פרוטוקול ה-HTTP , דרכו ניתן לכתוב (לא להקליט) בדיקות אוטומטיות לאפליקציות Web מעל כל סוגי הדפדפנים הגדולים (Chrome, Firefox, IE, Safari) וכמו כן הוא תומך במגוון שפות תכנות כמו Java, C#, PHP Ruby, Python, Perl ועוד.

ה-RC מורכב משני מודולים:

1. השרת שיכול לפתוח ולסגור Sessions לדפדפנים ולמעשה משמש כ-HTTP פרוקסי לבקשות web.

2. ספריות לקליינט בשפות תכנות המוזכרות מעלה.

דוגמא לארכיטקטורת ה-Remote Control: (מקור: http://www.seleniumhq.org/selenium-rc.png)

 

selenium-rc


Selenium WebDriver / Selenium 2.0:

היורש של Selenium RC , אפשר להגיד כי לקחו את האבא ופישטו אותו, הורידו ממנו את ה-SERVER , אם ה-RC שימש כמתווך בין פקודות הסלניום במנוע ההרצה לבין הדפדפן, כך ש-Webdriver חתך את ה-middleman כך אופן הטמעתו וכן מהירות עבודתו של ה-Webdriver הביאו את המוצר דור 2 הזה לביקוש גדול הרבה יותר. בשביל לעשות זאת, יצרו דרייבר חדש לכל סוג של דפדפן (Chrome Driver או IE Driver) אשר יודע להתממשק עם הדפדפן והאפליקציה היושבת עליו.

ה-Webdriver הינו למעשה API (מקבץ של ספריות – DLL , Jars …) דרכו אנו יכולים להתממשק לאלמנטים ב-Web Application  שלנו, או במילים אחרות ה-Webdriver הינו הגשר המוביל מהפקודות שלנו הכתובות בשפת תכנות מסויימת אל הקליינטים היושבים בדפדפנים.

להבדלים נוספים בין ה-RC ל-Webdriver ניתן לקרוא כאן.

הנה קוד לדוגמא של ה- Selenium Webdriver שעובד מול הפיירפוס:

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;

class GoogleSuggest
{
    static void Main(string[] args)
    {        
        IWebDriver driver = new FirefoxDriver();              // יצירת מופע לדרייבר של הפיירפוקס
        driver.Navigate().GoToUrl("http://www.google.com/");  // ניווט לאתר של גוגל       
        IWebElement query = driver.FindElement(By.Name("q")); // הגדרת אלמנט לפי השם       
        query.SendKeys("Cheese");                             // שליחת טקסט לאותו אלמנט שהוגדר      
        query.Submit();                                       // שליחת הטקסט
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); // המתנה של 10 שניות - חסם עליון
        wait.Until((d) => { return d.Title.ToLower().StartsWith("cheese"); });        
        System.Console.WriteLine("Page title is: " + driver.Title); // הדפסה לחלון את שם האתר בכותרתו        
        driver.Quit();                                              // סגירת הדפדפן
    }
}

 

לקריאה מעמיקה יותר אודות התקנה ועבודה עם Selenium WebDriver על Visual Studio , הקישו כאן

לקריאה מעמיקה יותר אודות התקנה ועבודה עם Selenium WebDriver על Eclipse , הקישו כאן

 

 


Selenium Appium

ה-Appium אמנם אינו נכלל תחת מוצרי הסלניום, אך אני מעדיף להכליל אותו רק בגלל שהוא מוצר משלים נהדר המכסה פלטפורמות נוספות אשר לא נכללו עד כה.

ה-Appium תומך גם בקליינטים שהם לא על PC (דפדפנים), אלא על Mobile Devices , הן Android והן iOS, הן על אפליקציות Native והן על אפליקציות Hybrid . הוא עושה זאת תוך כדי שימוש בפרוטוקול של ה-WebDriver.

טכנולוגיה זו פותחה עלידי חברת  Sauce Labs והיא מחזירה אותנו להתקנת שרת (כמו ה-Grid , כמו ה-RC) שידע לנהל את ההתממשקויות למכשירים השונים.

oanablog_0

 מקור: http://opencredo-website.s3.amazonaws.com/2013/09/oanablog_0.png

דמו קצר המציג את יכולותיו של ה-Appium תוכלו לראות כאן.

 


 

Selenium Grid:

השכבה העליונה בסוויטה הזו, דרכה ניתן לשלוט ולהריץ על כמה סביבות שונות במקביל, טוב לבדיקות עומסים וטוב ל-Coverage נרחב על סביבות שונות. למשל במידה ואני מעוניין להריץ את אותן בדיקות רגרסיה על דפדפן מסוג כרום על מערכת הפעלה לינוקס ובמקביל על דפדפן IE על מערכת חלונות 7 , בלחיצת כפתור אחת הכלי הזה יאפשר לי לעשות זאת. ניתן להסתכל על ה-Grid כמרכזיה אשר מנתבת שיחות (בקשות) לטלפונים (קליינטים) שונים.

הארכיטקטורה של ה-Grid:

hub_and_nodes

(מקור: http://cdn.guru99.com/images/hub_and_nodes.jpg)

לקריאה מעמיקה יותר אודות התקנה ועבודה עם Selenium Grid , הקישו כאן

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