מדריך | אוטומציה באמצעות Selenium | חלק 4 - מציאת אלמנטים (המחלקה By)

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

העבודה עם כלי הבדיקות Selenium מתבססת ברובה על התממשקות לאלמנטים השונים בדף ה-HTML אותו נרצה לבדוק.

היום נכנס לעומק הדברים ונבין כיצד נוכל למצוא את האלמנטים הללו יותר בקלות וביעילות.

דרישות קדם: ידע בסיסי בC# וביצוע שלושת המדריכים הקודמים בסדרה (1,2,3).


המחלקה By

במדריך על אובייקט WebDriver הצגתי את הפעולה FindElement אשר מקבלת את אובייקט מסוג By כפרמטר.
במילים אחרות, הפעולה FindElement שואלת: "לפי מה תרצה שאמצא לך אלמנט?"

המחלקה By מכילה מספר פעולות סטטיות אשר יתנו לפעולה FindElement את המענה הנדרש.

אז מהן האופציות למציאת אלמנט?

המחלקה By מכילה את הפעולות הבאות:


By.ClassName()

ל HTML  יש מגוון רחב של attributes.
attributes יופיעו בתוך האלמנטים, לדוגמה:
<a href="automatzia.com">המקום לפיתוח תוכנה ואוטומציה</a>
href הינו attribute של האלמנט a.

מכאן ניתן להבין כי ()By.ClassName, ימצא את האלמנט על פי הערך של Attribute בשם Class.

By.CssSelector()

CSS Selectors משמשים בעיקר במציאת אלמנטי HTML מורכבים אשר לא קיימת דרך פשוטה ומובנית לגשת אליהם.

לדוגמה, אם נרצה ללחוץ על האלמנט ה"העלה" בעמוד youtube - אלמנט מעט מורכב



נצטרך להשתמש בCssSelector באופן הבא:
WebElement uploadElement = FindElement(By.CssSelector("yt-icon[class='style-scope ytd-button-renderer']"));

By.Id()

ימצא את האלמנט לפי הערך של attribute בשם Id.

By.LinkText()

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

By.Name()

ימצא את האלמנט לפי הערך של attribute בשם Name.

By.PartialLinkText()

ימצא אלמנט (של קישור) לפי טקסט (גם טקסט חלקי) שמופיע בקישור

By.TagName()

ימצא אלמנט לפי שם תגית ה HTML
יש לשים לב בעת השימוש - ברבים מהמקרים תגיות מופיעות יותר מפעם אחת

By.XPath()

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

XPath יזהה את האלמנט באמצעות מיקומו הייחודי בעץ האלמנטים ב DOM (עץ ה-HTML).

נשתמש בXPath באופן הבא:
הדרך הנוחה ביותר בעיני לגלות מהו ה-XPath אותו אנחנו מחפשים היא שימוש בתוסף לChrome בשם Relative XPath. (קיימים תוספים דומים לשאר הדפדנים - חפש xpath extension בגוגל)

נאתר את הXPath כך:

ולאחר מכן הדבקת הXPath בקוד:
IWebElement element = driver.FindElement(By.XPath("//YT-ICON[@id='guide-icon']/self::YT-ICON"));
יזהה את אלמנט התפריט.

חשוב לציין כי מציאת אלמנטים באמצעות XPath ייחודית ונכונה אך אינה בטוחה לשימוש ודורשת תחזוקה,
זאת משום ששינוי הכי קטן בעץ הHTML ישבש את הנתיב אל האלמנט שלנו.

סיכום

זה היה המדריך האחרון בסדרת מדריכי הבסיס של כלי האוטומציה Selenium.

בארבעת המדריכים האחרונים למדנו כיצד מתקינים ומתחילים לעבוד עם Selenium מאפס.
למדנו איך גולשים לאתר, ומבצעים בדיקה פשוטה באתר, למדנו על אובייקט הWebDriver ואובייקט WebElement ויכולותיהם וכמו כן למדנו כיצד מאתרים אלמנטים בדף הHTML.

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

נתראה במדריכים הבאים!

תגובות

פוסטים פופולריים מהבלוג הזה

תכנות מונחה עצמים | Dependency Inversion Principle

מהם קבצי DLL ואיך להשתמש בהם?

מה ההבדל בין אוטומציה לפיתוח רגיל