בשיעור הקודם למדנו כיצד לזהות אלמנטים מסויימים על המסך עם סלניום , השיטות שהראתי היו מוגבלות למדיי , כל עוד יש id ייחודי, אז זה מצויין לעבוד איתו, אך מה נעשה במידה ולא נמצא Attribute ייחודי ? ומה אם נרצה לעבוד עם Customize Attribute אחד כזה שקיים רק במוצר שאני בודק ? למשל כאשר אני רואה את האלמנט בקוד HTML כך:

<div id="myID"></div>

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

<div myAttribute="HelloWorld"></div>

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

WebElement element = driver.findElement(By.myAttribute("HelloWorld");

כי סלניום לא מכיר בפונקציית הזיהוי: By.myAttribute

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

 

פונקצית ה-Find Element By CssSelector:

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

<button id="FirstName" DateKey="01-01-1970">Button 1</button>                               // דוגמא 1 לאלמנט בדף
<button id="FirstName" DateKey="31-12-2000">Button 2</button>                               // דוגמא 2 לאלמנט בדף


WebElement element = driver.findElement(By.cssSelector("button[DateKey='31-12-2000']"));   // דוגמא לקוד סלניום

מה ראינו פה ? הדוגמא לקוד תזהה לנו את Button2 , אילו היינו משתמשים ב- findElement By Id אז התוצאה המוחזרת הייתה Button1 כי לשניהם יש אותו ערך של ID (אז הפונקציה הייתה מחזירה את הערך הראשון). בעזרת CssSelector ראינו כי ניתן לזהות ייחודית גם אלמנטים בעלי Attribute ייחודיים לנו (כאלו שסלניום לא תומך באופן מובנה)


 

פונקצית ה-Find Element By XPath:

תיאור: פונקציה שבאה לענות על הצורך בזיהוי אלמנטים שלא על ידי Attributes , במידה והמוצר לא נכתב כידידותי מספיק לאיש האוטומציה ואין מספיק מידע היכול לזהות את האלמנט עימו נרצה לעבוד. בואו נבין תחילה מה זה XPath , ובכן, זוהי שפה לתיאור שאילתות המבוצעת על סוגי קבצים אשר תוכנם בנוי בשיטת עץ , כמו למשל קובץ XML או במקרה שלנו – HTML.

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

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

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

WebElement element = driver.findElement(By.xpath("/html/body/div[1]/div/div[1]/article/p[1]"));   // דוגמא לקוד סלניום

 

מידע נוסף על XPath ניתן למצוא באתר של Tutorials Point

 

 


arrowBackarrowMainarrowFor

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