בשיעור זה נלמד כיצד ניתן בעזרת סלניום לעבור בין חלונות הדפדפן שכוללים גם פריימים, טאבים ופופאפים.
אך תחילה בואו נבין מה זה: window handle . בזמן שאנחנו יוצרים מופע (Instance) של Webdriver , למשל:
driver = new FirefoxDriver();
מאחורי הקלעים סלניום מקצה מזהה ייחודי לכל חלון שפתוח בדפדפן (אותו אחד אליו קישרנו את ה-Driver, במקרה שלנו – פיירפוקס), המזהה היחודי הזה הוא למעשה מחרוזת שיכולה להכיל תווים ומספרים, המחרוזת נקראת window handle.
בעזרת ה-window handle סלניום (שמקצה אותה) יכול לזהות כל חלון וחלון ולגשת אליו.
* שימו לב, חלונות של הדפדפן הם היחידים שלהם סלניום מקצה window handle וניתן לגשת אליהם, חלון פופ-אפ של windows לדוגמא אינו יכול לעבוד במקרה הזה, (פופ-אפ windows יכול לקפוץ כאשר אנו רוצים להעלות קובץ ממערכת ההפעלה לדוגמא). לבעיה זו אגב, ישנם כמה פתרונות, אחד מהם אציג בשיעור 21 , השני בשיעור 22 והאחרון בטיפים.
פונקציית GetWindowHandle:
תיאור: הפונקציה מחזירה מחרוזת המכילה את המזהה הייחודי של החלון בו אנו נמצאים, נשמור אותה בתוך string
דוגמא: | String my_handle= driver.getWindowHandle(); |
פונקציית GetWindowHandles:
תיאור: הפונקציה מחזירה סט של מחרוזות של כל החלונות הפתוחים בדפדפן, נשמור אתן בתוך Set
דוגמא: | Set<String> my_handles= driver.getWindowHandles(); |
פונקציית SwitchTo Window:
תיאור: הפונקציה מעבירה את הפוקוס לחלון פתוח אחר בדפדפן, הפונקציה מקבלת מחרוזת בה שם החלון
דוגמא: | driver.switchTo().window("windowName"); |
דרך נוספת היא להעביר לפונקציה במקום מחרוזת קבועה (WindowName) את ערך ה-window handle, כך:
for (String handle : driver.getWindowHandles()) { driver.switchTo().window(handle);}
פונקציית SwitchTo Frame:
תיאור: הפונקציה מעבירה את הפוקוס למסגרת פתוחה אחרת בדפדפן, הפונקציה מקבלת מחרוזת בה שם החלון
דוגמא: | driver.switchTo().frame("frameName"); |
פונקציית SwitchTo Alert:
תיאור: הפונקציה מעבירה את הפוקוס לחלון פופ-אפ בדפדפן, הפונקציה מקבלת מחרוזת בה שם החלון
דוגמא: | Alert alert = driver.switchTo().alert(); |
דרך נוספת לעבור לחלון פופ-אפ עם שימוש ב-getWindowHandles:
String my_handle = driver.getWindowHandle(); driver.findElement(By.id("ElementID")).click(); // פעולה המקפיצה את הפופ-אפ while (driver.getWindowHandles().size() < 2) // המתנה עד שחלון הפופ-אפ יקפוץ { Thread.sleep(500); } Set handles = driver.getWindowHandles(); // מצא את כל החלונות הפתוחים ותכניס אותם לסט for (String windowHandle : handles) // תעבור על כל אחד מן החלונות { if (!windowHandle.equals(my_handle)) // כנס לתנאי במידה והחלון הרצוי שונה מהחלון הנוכחי { driver.switchTo().window(windowHandle); // תעבור לחלון הרצוי break; } }