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

driver.findElement(By.id("myID")).click();

עשרות פעמים בעשרות דפים שונים במוצר, זה יהיה גם שיכפול קוד מיותר וגם (חשוב יותר) סיוט לתחזק, במידה ונגיד מחר צוות המפתחים ישנה את ה-ID Attribute של האלמנט מ-myID ל-SomeOtherID.

בשיעור זה נלמד על טכניקה שנקראת Page Object או Page Object Model  או Page Object Design Pattern … תלוי את מי שואלים, הטכניקה הזו מציעה לנו פתרון לבעיה שהוזכרה למעלה, בעזרתה נוכל למנוע שיכפולי קוד מיותרים וניתן עימה לתחזק את הקוד בצורה יעילה יותר. זוהי תהיה גם הפעם הראשונה שאנו נשתמש בתוכנית שלנו ביותר ממחלקה אחת (אותה מחלקה שעד כה גם הרצנו ממנה) – מה שאומר שאנו מתחילים להשתמש פה (ברמה הלוגית) בשכבות.

Page Object Model אומר בגדול שכל עמוד באפליקציה שלנו ייוצג על ידי מחלקה נפרדת, בכל מחלקה נממש את זיהוי האלמנטים שבעמוד. בתוכנית הראשית נקרא לכל אלמנט מתוך אותה מחלקה שלו ונפעיל עליו את המתודה שאנו רוצים. לא הבנתם כלום עד עכשיו ? לא נורא, דרך הדוגמא נוכל להבין את המודל טוב יותר.

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

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

package pageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
 
public class Home_Page
{
    private static WebElement element = null;
    public static WebElement link_Contact(WebDriver driver)
    {
        element = driver.findElement(By.cssSelector("a[href='http://blog.yoniflenner.net/?page_id=2']"));  // זיהוי הלינק לדף צור קשר
        return element;
    }
}

מה ראינו פה ? מחלקה של דף הבית המכילה פונקציה אחת המייצגת זיהוי של לינק הדף צור קשר ומחזירה את האלמנט שהיא מצאה.

 

* רוצים לראות את המשך הפוסט ? צרו עימי קשר ונקבע פגישה לקורס פרונטלי

 


arrowBackarrowMainarrowFor

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