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

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

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

את המדריך הזה בחרתי להטמיע ולהציג על סביבת Eclipse-Java והטסטים ירוצו על דפדפן מסוג Mozilla Firefox.

* – מדריך נוסף שכתבתי באתר יתייחס לאותו תרשים זרימה רק על סביבת #Visual Studio-C והטסטים ירוצו על דפדפן מסוג Google Chrome.

אז נתחיל….

שלב 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 , בו נבחר ספרייה בה נרצה שקבצי הפרוייקט שלנו ישבו

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

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

 


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

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

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

 


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

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

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

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

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

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

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

 


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

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

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

ונקיש על Finish

 


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

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

אך לפני כן, בואו נחשוב על דוגמא למקרה בדיקה:

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

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

 

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

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import static org.junit.Assert.assertEquals;

public class MyClass {

	public static void main(String[] args) {
		WebDriver driver = new FirefoxDriver();
		driver.get("http://google.com");
		driver.manage().window().maximize();
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
		driver.findElement(By.xpath("//*[@id='lst-ib']")).sendKeys("twitter");
		driver.findElement(By.cssSelector("input[name='btnK']")).click();
		driver.findElement(By.cssSelector("a[href='https://twitter.com/?lang=he']")).click();
		
		WebDriverWait wait = new WebDriverWait(driver, 10);
		wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[class='btn signup-btn u-floatRight']")));
		
		String expectedTitle = "Welcome to Twitter - Login or Sign up";
		
		assertEquals(expectedTitle,driver.getTitle());

        driver.quit();
	}	
}

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

Import:

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

WebDriver driver = new FirefoxDriver();

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

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

driver.get("http://google.com");

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

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

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

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

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

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

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

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

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

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

יהיה

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

 

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

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

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

 

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