FindAll vs. FindBys

את הפוסט הנוכחי החלטתי לכתוב מכיוון שכבר כמה תלמידים שלי נתקלו בבאותה שאלה שנשאלת בראיונות עבודה , זוהי השאלה המעידה על הבנה ב- Page Objects Pattern והיא הולכת כך:

מהו ההבדל בין אנוטציית ה-FindAll לבין אנוטציית ה-FindBys ב-Page Objects  ?

אז כל מי שאי פעם התעסק עם Page Objects באוטומציה, לבטח יכיר את אנוטציית ה-FindBy הפופולרית עימה אנו נזהה אלמנטים על ה-DOM, כפי שמוצג בדוגמא הנ"ל:

@FindBy(how = How.ID, using = "123")
private WebElement testElement

או בצורת הכתיבה המקוצרת:

@FindBy(id = "123")
private WebElement testElement

שזה אומר, תמצא לי אלמנט בדף עם id שבו הערך: 123

האנוטציות FindAll ו-FindBys הן הרבה פחות פופולריות מהקודמת ועליהן ארחיב כעת.

אז קודם כל בואו נציץ בדוקומנטציה הרישמית של Selenium WebDriver, תחילה על FindAll:

וכעת על FindBys:

אנו רואים כי שתי האנוטציות הללו ממומשות תחת ספריית:  org.openqa.selenium.support אך ישנם הבדלים.

אנוטציית ה-FindBys היא למעשה Container של אנוטציות, שזה אומר שבתוכה נוכל לכתוב כמה אנוטציות (אחת או יותר) של FindBy, כאשר בתוך כל FindBy נגדיר קריטריון חיפוש כלשהו, ה-FindBys תחזיר רשימה של האלמנטים שעונים על כל הקריטריונים ב-FindBy, בואו נציג את המשפט הקצת מבלבל הזה על ידי דוגמא, זהו ה-HTML ממנו נרצה למצוא אלמנטים:

כעת נשתמש באנוטציית ה-FindBys :

@FindBys({
        @FindBy(css = "li[key='android']"),
        @FindBy(css = "li[key='ios']")
})
private WebElement exampleFindBys;

אנו רואים כאן זיהוי של אלמנטים עם key=android ועם-key=ios, במקרה הזה הרשימה שלנו תהיה ריקה, למה ? כי אין לנו ב- HTML DOM אלמנטים שעונים על קריטריון החיפוש: "תמצא לי אלמנטים שיש להם גם key=android וגם key=ios"

בואו נשתמש כעת באנוטציית ה-FindAll:

@FindAll({
        @FindBy(css = "li[key='android']"),
        @FindBy(css = "li[key='ios']")
})
private WebElement exampleFindAll;

במקרה זה, הרשימה שלנו תכיל איבר מסויים ספציפי, קירטריון החיפוש הינו: "תמצא לי אלמנט עם key=ios שקיים בתוך אלמנט עם key=android"

במילים אחרות ניתן להגיד שה-FindBys עובד עם אופרטור ה-AND ואילו ה-FindAll עובד עם Inside

Scroll to Top
דילוג לתוכן