סלניום לחץ על קישור לפי ערך href

ב- Selenium WebDriver, ישנן מספר דרכים בהן אנו יכולים לקיים אינטראקציה עם אלמנטים ברשת, כגון לפי מזהה של האלמנט, XPath, CSS וכו '...

אנו יכולים גם ללחוץ על קישורים לפי linkText או partialLinkText. שיטות אלו טובות אם אנו מכירים את הטקסט הצפוי בין תגים.

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


נניח שאנחנו רוצים ללחוץ על קישור שמצביע על profile.html,

לְמָשָׁל


View Profile

כפי שצוין קודם, אנו יכולים להשתמש

driver.findElement(By.linkText('View Profile')).click()

וזה יעבוד, כל עוד אנחנו בדף עם שפה אנגלית.

כאשר אנו משנים את השפה לגרמנית, למשל, הקישור שלנו יוצג כעת

Profil ansehen

עכשיו, התור


driver.findElement(By.linkText('View Profile')).click()

ייכשל מכיוון שאין קישור בדף הפרופיל עם הטקסט הזה.

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

במילים אחרות, בינלאומיות לא אמורה להשפיע על ה- href של הקישורים.

ל- WebDriver אין דרך עצמאית וישירה ללחוץ על קישור לפי ערך href שלו. במקום זאת, עלינו להשיג את כל הקישורים בדף, לחלץ את תכונת href ואז להשוות את ערכי href למה שאנחנו מצפים.




לחץ על קישור לפי href

נניח שיש לנו את הקישורים הבאים ואנחנו רוצים ללחוץ על קישור הפרופיל

View Profile Transactions public void clickLinkByHref(String href) {
List anchors = driver.findElements(By.tagName('a');
Iterator i = anchors.iterator();
while(i.hasNext()) {
WebElement anchor = i.next();
if(anchor.getAttribute('href').contains(href)) {

anchor.click();

break;
}
} }

אז נוכל להשתמש ב clickLinkByHref('Profile')

ואז הפונקציה שלעיל תקבל את כל הקישורים בדף ותחזור דרכם וכאשר היא תמצא קישור המכיל פרופיל, WebDriver ילחץ על הקישור.

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


public void clickLinkByHref(String href, int position) {
List anchors = driver.findElements(By.tagName('a');
Iterator i = anchors.iterator();
int j = 0;
while(i.hasNext()) {
WebElement anchor = i.next();

if(anchor.getAttribute('href').contains(href)) {

j++;
}

if(anchor.getAttribute('href').contains(href)


&& j == position) {

anchor.click();

break;
}
} }

לקריאה נוספת: