לאחרונה אנחנו מקבלים לא מעט בקשות לעשות חזרה וסדר בדברים בכל מה שקשור לתכנות מונחה עצמים בעולם האוטומציה. עם הזמן יותר ויותר שואלים בראיונות עבודה: "תן לי בבקשה דוגמא של X בפרוייקט האוטומציה שלך" כאשר ה-X הזה הינו מושג מתכנות מונחה עצמים.
אז החלטנו להרים את הכפפה ולעשות קצת סדר במושגים שהרבה מתבלבלים \ לא זוכרים אותם והיכן יש לנו שימוש בפרוייקט אוטומציה, בחרנו את ה-5 שהכי קשים להבנה: Interface, Abstraction, Inheritance, Polymorphism, Encapsulation , יאללה בואו ניתן בראש ונתחיל ב-
אבסטרקציה – Abstraction:
האבסטרקציה אומרת כזה דבר, בוא נחביא את הלוגיקה ומידע פנימי משעמם של מימושים ולוגיקה ונחשוף החוצה רק הכותרות של הפעולות, למה ? כדי לא לסבך את הצורה לאנשים שאינם אמורים להיכנס לקרביים של הקוד מאחורי הקלעים.
דוגמא לאבסטרקציה באוטומציה: בואו ניקח את ה-Pattern הכי פופולרי ומוכר בסלניום למשל, ה-Page Objects , מה למעשה אנחנו עושים שם ? מגדירים מחלקה (Page) מסויימת ושם מזהים אלמנטים (לפי כל אחד מהלוקייטורים שלמדנו) ולפעמים מכניסים לשם גם פעולות על האלמנטים. האם אותו אחד שכותב את מחלקת הבדיקות אמור לדעת איך למשל זיהיתם את כפתור ה-Login ? ממש לא, מבחינתו זה שקוף, מבחינתו זה מוחבא, הוא לא צריך להתעסק עם כל האיכסה הזה
הורשה – Inheritance:
הורשה בתכנות מונחה עצמים באה אלינו בעיקר כדי לא לחזור על עצמינו, כדי לא לשכפל קוד. נגדיר מאפיינים והתנהגויות במחלקת אב ונשתמש בהם בכל אחד מהאובייקטים היורשים מבלי להגדיר אותם שוב פעם, זה מאפשר מה שנקרא: Re-usability
דוגמא להורשה באוטומציה: יש המון מקרים באוטומציה לעבודה עם הורשות, החל מאותו BaseClass שבוא אנו נגדיר את הדרייבר או ה-browser , דרך ה-BaseTest שם נגדיר פעולות גנריות שחוזרות על עצמן (כמו ה-click, sendKeys וכו') בכל מיני מקומות. מחלקת ה-FirefoxDriver למשל יורשת מ-RemoteWebDriver ומממשת שם כמה מתודות.
כימוס – Encapsulation:
כימוס זה הסתרה, החבאה וזה גם הרעיון של צורת עבודה זו שמתחברת לאבסטרקציה. אנחנו נרצה בקוד שלנו להסתיר חלקים מסויימים שנבנה ע"י קוד לוגי ונתונים (data).
דוגמא לכימוס באוטומציה: זוכרים את הדוגמא של האבסטרקציה ? יצרנו מחלקת Page Object כלשהי, זיהינו את כפתור ה-Login , למישהו מבחוץ יש מושג איך זיהינו אותו ? וואלה לא, וזה לא מעניין אותנו מחוץ למחלקה. הזיהוי מוסתר מפנינו. דוגמא נוספת – מישהו יודע איך עובדת האנוטציה של FindBy@ מאחורי הקלעים ? לי יצא לראות ואני אומר לכם, זוהי חתיכת לוגיקה מאחורי הקלעים שמפעילים לזיהוי אלמנט בצורה כזו אלגנטית, אבל אנחנובשבילנו – כמפתחי אוטומציה זה פשוט לשימוש , האיכסה שמאחורי הקלעים לא מעניין אותנו, האיכסה מוסתר בפנינו וטוב שכך.
* למי שבכל זאת מעוניין לדעת מה קורה שם מאחורי הקלעים של אנוטציית ה-FindBy@ ושאר הדברים המעניינים במחלקת ה-PageFactory מוזמן להירשם לקורס ה-Automation Plus Plus , יצרנו שם פרק שלם רק על זה
רב תצורתיות – Polymorphism:
הפולימורפיזם מגיע מלשון תצורות רבות, זאת אומרת לבצע את הפעולה בתצורות \ דרכים שונות. הדוגמא הטובה ביותר שאני בד"כ נותן בשיעורי OOP היא נסיעה מקריית שמונה לאילת, אנחנו מתחילים מנקודה מסויימת ומסיימים בנקודה אחרת, איך להגיע לשם ? יש מגוון דרכים. באוטו על כביש 90 , באוטובוס דרך תל אביב, בטיסה עד נמל התעופה רמון ועוד…
למעשה מי שמכיר העמסה של מתודות (Method Overloading) זהו סוג של פולימורפיזם.
דוגמא לפולימורפיזם באוטומציה: כפי שרשמתי, העמסה של מתודות היא פולימורפיזם והעמסה ניתן לראות בקלות באוטומציה, כמו למשל ב-implicitly wait אנחנו יכולים לבחור את יחידות המידה של זמני ההמתנה, גם כאשר אנחנו יוצרים ומאתחלים את הדרייבר שלנו אנחנו משתמשים ברב תצורתיות, כאשר מגדירים שהדרייבר יהיה מסוג WebDriver ומאתחלים אותו למשל לכרום-דרייבר (מחלקת בת)