seleniumJavaJUnit

Selenium – Java / JUnit

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

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

ההתקנה וההטמעה הראשונית מרתיעה רבים מלהתחיל ולנסות להשתמש בכלי הזה, אני די משוכנע כי לאחר הקריאה במדריך זה העניינים יהיו ברורים הרבה יותר וכבר לא כל כך מרתיעים.

* – מדריך זה בא לתאר הרצת סלניום ב-Java על סביבת JUnit , אם קראתם כבר את המדריך Selenium Java , תוכלו לדלג על שלבים 1 עד 6 ולקפוץ ישר לשלב 7

אז נתחיל….

שלב 1: התקנת JDK

ניכנס תחילה לאתר של Oracle ונוריד את הJava Development Kit –JDK- מכאן : (http://www.oracle.com/technetwork/java/javase/downloads/index.html)

 


שלב 2: התקנת ה- IDE – Eclipse

ה-IDE הנפוץ ביותר לשפת Java הינו ה-Eclipse החינמי (עימו גם נעבוד בהדרכה זו), ניכנס לאתר של Eclipse ונוריד את הגרסה המתאימה למחשבנו (https://eclipse.org/downloads/packages/eclipse-ide-java-developers/lunasr1)

נפתח את קובץ ה-ZIP ונעתיק את תכולתו אל ספרייה תחת Program Files, נקליק על קובץ ההפעלה: eclipse.exe.

 


שלב 3: פתיחת פרוייקט Java חדש

אחרי שהפעלנו את -Eclipse לראשונה ניתקל במסך WorkSpace Launcher , בו נבחר ספרייה בה נרצה שקבצי הפרוייקט שלנו ישבו

Eclipse2

כעת נקיש על File->New->Java Project

נבחר שם לפרוייקט שלנו ונקיש על Finish

Eclipse3

 


שלב 4: הורדת Selenium Java Jars

נכנס לאתר של סלניום ונוריד את קבצי ה-Jars של Java למחשב (http://www.seleniumhq.org/download)

Eclipse1

נפתח את קובץ ה-ZIP ונעתיקו את תכולתו לתוך ספריית SeleniumDrivers \Java שניצור מבעוד מועד

 


שלב 5: התקנת Selenium Java Jars

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

לשם עלינו להקליק תחילה עם המקש הימני של העכבר על שם הפרוייקט שלנו – MyFirstProject (מופיע בצד שמאל למעלה) ועל Properties

במסך החדש שיקפוץ לנו, נקיש על Java Build Path , אח”כ על הטאב – Libraries ועל הכפתור מימינו Add External Jars

Eclipse4

נלך לספריה בה שמרנו את קבצי ה-Jars מהשלב הקודם, תחת ספריית SeleniumDrivers\Java, ונסמן את כל הקבצים, גם שני קבצי ה- selenium-javaוגם כל מה שיושב תחת ספריית libs

כעת הספריה צריכה להיראות כך:

Eclipse10

נקיש על OK ונצא בחזרה למסך הראשי.

 


שלב 6: יצירת ה-Class

נקיש על המקש הימני של העכבר על ספריית src (יושב מתחת לשם הפרוייקט שלנו), נקיש על NEW ואח”כ נבחר Class

Eclipse5

בעמוד החדש שקפץ לנו נכניס את שם הקלאס אליו אנו נרצה לכתוב ונסמן ב-V את האופציה public static void main

ונקיש על Finish

Eclipse6

 


שלב 7: כתיבת הטסט

הגענו אל השלב הסופי בו נלכלך את ידינו ונכתוב קצת קוד ב-Java ליצירת בדיקות אוטומטיות.

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

[הערה] - אין צורך בהתקנת JUnit , ברגע שאנחנו מורידים ומתקינים את קבצי התקנת הסלניום (מה שביצענו כבר בסעיף 4 ואח”כ 5), ספריות ה-JUnit מותקנות כבר אוטומטית כחלק אינטגרלי מהמערכת.

ה-JUnit זוהי סביבת הרצה , אשר מאפשרת לנו להציע את פעולת ה-Execute לתוכנית שלנו על ידי כך שאנו מודיעים לקומפיילר על מילים שמורות בעלות מאפיינים ברורים ומטרות ידועות. המילים הללו נקראות – אנוטציות (Annotations) , וב-JUnit יש כמה מהן, הנה העיקריות:

BeforeClass@ – תחת אנוטציה זו נגדיר פונקציה כך שהקומפיילר ידע להריץ פונקציה זו כראשונה בסדר ההרצות לכל מחלקה, לכאן נרצה להכניס בקוד את ההגדרות של הדרייבר בדרך כלל.

Test@ – תחת אנוטציה זו נגדיר פונקציה כך שהקומפיילר ידע שזהוי פונקציית ברת הרצה וכן נוכל אח”כ לראות אותה בממשק מנהל ההרצות של JUnit

AfterClass@ – תחת אנוטציה זו נגדיר פונקציה כך שהקומפיילר ידע להריץ פונקציה זו כראשונה בסדר ההרצות לכל מחלקה, לכאן נרצה להכניס בקוד את הפעולות המסיימות של התוכנית שלנו, כמו למשל סגירת דפדפן

בנוסף, סביבת ה-JUnit תומכת גם בפונקציות מובנות של בדיקות , פונקציות אלו ממומשות תחת מחלקת Assert , אפרט כאן רק על כמה עיקריות:

assertEquals – פונקציה אשר מקבלת 2 אובייקטים (יכלים להיות WebElements או Strings) ומשווה ביניהן, במידה והן שוות אנו עוברים לפקודה הבאה שבתוכנית, במידה והן שונות, נזרק Exception

assertTrue – פונקציה אשר מקבלת ביטוי (למשל A<B) , במידה והביטוי הנ”ל מתקיים אנו עוברים לפקודה הבאה שבתוכנית, במידה והביטוי הנ”ל אינו מתקיים, נזרק Exception

assertFalse – פונקציה אשר מקבלת ביטוי (למשל A<B) , במידה והביטוי הנ”ל אינו מתקיים אנו עוברים לפקודה הבאה שבתוכנית, במידה והביטוי הנ”ל מתקיים, נזרק Exception

למידע נוסף ורשימת כל הפונקציות Assert שקיימות, היכנסו לעמוד הדוקומנטציה של JUnit

 

בואו כעת נחשוב על דוגמא למקרה בדיקה:

  1. נפתח את הדפדפן – Firefox
  2. נכניס בשורת הכתובות את האתר של גוגל
  3. נכניס למנוע החיפור את המילה : twitter ונקיש על “חפש”
  4. נקיש על התוצאה הראשונה שתופיע לנו ברשימת התוצאות (התוצאה הראשונה מן הסתם תביא אותנו אל האתר של טוויטר), נכון שיכולנו פשוט להכניס מלכתחילה את האתר של טוויטר בשורת הכתובות, אבל פה יש לנו קצת יותר בשר בבדיקה.
  5. האתר של טוויטר אמור להיפתח לנו, אנו נבצע בדיקה פשוטה שהוא באמת עלה, וזה יהיה לבדוק שה-title יהיה תואם את מה שאנחנו מחפשים (במקרה שלנו: Welcome to Twitter – Login or Sign up)

במידה והא מצא את זה, הבדיקה תעבור, במידה ולא הבדיקה תיכשל

 

אז במקרה הכנתי מבעוד מועד בדיקה כזו והיא מפורטת כאן:

בואו נעבור בקצרה על הקוד וננסה להבין אותו:

Import:

זוכרים שבשלב 5 צירפנו את קבצי הדרייברים של הסלניום לפרוייקט שלנו ? יפה, זה המקום לשייך את הקבצים הללו (שמכילים ספריות שלמות ומימושים רבים של פונקציות) לקוד שלנו.

driver = new FirefoxDriver();

זוהי שורת איתחול האובייקט שלנו , יצרנו רפרנס למשתנה מסוג Webdriver ובעזרת ה-new יצרנו לו Instance עם הקלאס של Firefox.

נשאלת השאלה, למה בFirefox איננו משתמשים בדרייבר חיצוני כמו בכרום ובאינטרנט אקספלורר ? זה בגלל שה-Firefox מגיע כבר עם הדרייבר הזה בפנים (תשובה מלאה כאן: https://code.google.com/p/selenium/wiki/FirefoxDriver)

driver.manage().window().maximize();

מגדיל את חלון הדפדפן עד למקסימום שלו

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

ה-impicitWait זוהי מתודה שממתינה פרק זמן מסויים, במקרה שלנו הגדרנו 10 שניות כחסם המתנה עליון, בזמן זה היא תנסה לחפש אלמנטים ב-DOM
ניתן להבחין כי בהמשך התוכנית השתמשתי בExcplicitWait , שבמקרה זה הדרייבר גם כן ממתין, אך כאן הוא לא ימשיך עד שתנאי מסויים לא יתקיים (כמו הופעת אלמנט ב-DOM)

driver.get(“http://google.com”);

מתודת ה-get נקראת על ה-instance של ה-Webdriver בכדיי להפעיל instance חדש של דפדפן , פרמטר ה-string שהמתודה הזו מקבלת מפנה את הדפדפן לכתובת שמוערכת ב-string

driver.findElement(By.xpath(“//*[@id=’lst-ib’]”)).sendKeys(“twitter”);

מתודת ה-sendKeys המופעלת על האלמנט שזיהויו בדף מתבצע ע”י שיטה שנקראת xpath , לאחר הזיהוי נשלח טקסט אל אותו אלמנט (במקרה שלנו נחפש את תיבת טקסט החיפוש של גוגל ונכניס לתוכה את הערך twitter

driver.findElement(By.cssSelector(“input[name=’btnK’]”)).click();

מתודת ה-Click המופעלת על האלמנט שזיהויו בדף מתבצע ע”י שיטה שנקראת cssSelector

assertEquals(expectedTitle,driver.getTitle());

מתודת ה-assertEquals (שאגב אינה שייכת לדרייבר של הסלניום בניגוד למתודות האחרות עליהן הרחבתי פה) משווה בין שני String-ים (יכולה גם להשוות בין טיפוסים שונים) תעביר את הטסט במידה והתנאי יתקיים (יהיו שווים) ותכשיל אותו במידה ולא.

מתודת ה-getTitle (ששייכת לסלניום) מחזירה את הערך הקיים תחת הטאג ה-HTML: <title>

driver.quit();

מתודה שמסיימת את חיי הדרייבר ובכך סוגרת את הדפדפן.

 

ולסיום – נרצה להריץ את הבדיקה:

בשביל זה נקיש על אופציית ה-Run בתפריט העליון ועל אופציית RUN

Eclipse8

כעת בואו ננסה להכשיל את הטסט ונראה שהוא באמת נכשל:

נשנה את ערך ה-STRING למשהו אחר כך ש:

string expectedTitle = “Welcome to Twitter – Login or Sign up”;

יהיה

string expectedTitle = “Welcome to FaceBook – Login or Sign up”;

 

זה אומר כי אנחנו מצפים שה-Title באתר של twitter יופיע עם הכיתוב של FaceBook.

נריץ את הטסט ונגלה שסלניום באמת מצא שגיאה:

Eclipse9

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