
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS), כלומר 5 שניות, ביחידת זמן שניות.הטקסט המלא של הדקות הראשונות בהרצאה «Wait For Web Element - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בסרטון הקודם התחלנו לדבר על סינכרוניזיישן, על המתנה, ווייט, בטסט האוטומטי שלנו.
דיברנו למה אנחנו צריכים בעצם את הסינכרוניזיישן. מה זה סינכרוניזציה? המתנה לאלמנטים שהטענו לתוך הדף בזמן שאנחנו או לפני שאנחנו מבצעים פעולה.
אם הטסט שלנו צריך לבצע לחיצה על כפתור או הזנת טקסט לשדה, נרצה להיות בטוחים שהשדה הזה נמצא ונטען לדף שלנו. ולכן אנחנו צריכים לצייד את הטסט שלנו ביכולות סינכרוניזציה או wait.
אם לא נעשה את זה עלול הטסט שלנו ליפול בגלל שאלמנטים שאנחנו מצפים שיהיו לא יהיו זמינים לפקודות Java שלנו, קליק או הזנת טקסט ויהיה exception של element not found.
דיברנו על הדרכים איך אנחנו מציידים את הטסט שלנו בסינכרוניזציה בהמתנה. עקרנו את הסליפ, לסליפ יש יתרונות שהוא קל לכתיבה הוא מהיר אבל יש לו חסרונות הוא תמיד יחכה הוא לא מושפע ממה שקורה בעצם בדום בדוקומנט אובג'קט מודל אם האובייקט שלנו web-element שלנו כבר ניתן הוא בכל זאת יחכה את זמן ההמתנה שנתנו לכן אני רוצה להכיר גם את שני הדרכים הבאות כדי
לבצע wait או סינכרוניזציה בטסט שלנו היום נכיר את האימפליסיט wait זה אומר implicit weight אומר לשנות את הגדרות הבסיסיות של ה-WebDriver שלנו, אני חוזר ה-WebDriver לא WebElement, על מנת שהוא יהיה יותר טולרנטי יותר סבלני לאלמנטים שניתנים.
תכף אני אסביר את זה, אנחנו בעצם יכולים להגדיר את ה-WebDriver שלנו שינסה לדגום את הדום יותר מפעם אחת בטווח זמן מסוים.
בואו נראה את הדוגמה ב-ID ואני אסביר בדיוק על מה אנחנו מדברים. אני הולך לאקליפס שלי, יצרנו את הטסט, הטסט הקודם שהכרנו בשיעור הקודם, יצרנו קלאס, קלאס הרצאה, void main, יש לנו את ה-SystemSetProperty, Chrome WebDriver, יש לנו את ה-Chrome Exit, כאן יש לנו את התחול של ה-WebDriver מסוג
ChromeDriver ויש לנו את היכולת ל-ToneDף. אנחנו עושים Manage Window Maximized ו-Get ל-URL הבא, שזה דף הבדיקה שלנו timeanddate.com/weather אבל הכרנו קודם את ה-thread אמרנו שאנחנו יכולים להשפיע על אובייקט ה-thread האובייקט שאחראי על הריצה שלנו מול הבראוזר לחכות שלוש שניות ואנחנו צריכים להכניס interrupt exception למתודה שלנו בזמן שאנחנו משתמשים
ב-threadsleep פעם אחת בצורה כזאתי ואנחנו יכולים לבצע את ההמתנה של שלוש שניות אבל אם אנחנו לא רוצים להתבסס על ה-wait הזה, ה-wait הקבוע של השלוש שניות, נרצה להשפיע על ה-driver, הגדרות ה-WebDriver שלנו.
איך נעשה את זה? אחרי שאני עושה maximize, אני יכול גם לפני, אבל לצורך העניין אני גם יכול אחרי, driver.manage.timeout אנחנו קובעים timeout, תכף אני אסביר מה זה.
יש לנו את ה-class timeout ואת המתודה timeout, כשאני לוחץ את הנקודה יש לי עוד שושור של הגדרות שאני יכול לבחור. אני בוחר ב-implicit weight, זה הסינכרוניזציה שאנחנו רוצים להשתמש בה.
ה-implicit weight מקבל כפרמטרים שני חלקים, שני פרמטרים, חלק אחד הוא המספר עצמו, לדוגמה אני רוצה לחכות חמש שניות, מיד אני אסביר למה אני מחכה חמש שניות, את הארץ שאני צריך להגיד איזה בעצם איזה time unit אני בוחר זאת אומרת מה אני בעצם רוצה להגיד שזה החמש חמש שניות חמש שעות חמש דקות לצורך העניין אנחנו עובדים עם שניות נקודה
פסיק עכשיו אני אסביר את הקוד שכתבתי בעצם הפעלתי פעולה על הדרייבר דרך המתודה manage שיש בתוכה את המתודה timeout שיש בתוכה את האימפליסיט וייט שלחתי שתי פרמטרים 5 יחידות של סקנדס של שניות.
זה הסינטקס שאנחנו עושים כדי לעשות אימפליסיט וייט. מה זה אומר בפועל בטסט שלנו האימפליסיט וייט אומר דבר הבא בכל פעם שאתה ניגש לפעולה של פיינד אלמנט אם יש איזשהו מצב שאתה לא מוצא את אותו אלמנט שחיפשת לדוגמה במקרה שלנו זה הכפתור מיי אקאונט אז תחכה עוד
חמש שניות לפני שאתה מעיף את האקספצ'ן אלמנט not found. אני חוזר ברגע שהדריוור לא מוצא את ה-Web אלמנט שהוא מחפש הוא מחכה חמש שניות מנסה עוד פעם אם גם פעם השנייה הוא לא מוצא את אותו אלמנט האלמנט לא ניתן בחמש שניות אז הוא בעצם יוצא באקספצ'ן של אלמנט not found אבל זה נותן לנו אפשרות של ניסיון שני לפני
שהוא מעיף לנו את הטסט וזה חשוב מאוד. למה לא נרצה לתת 50 שניות? כי יכול להיות שבפעם הראשונה במייד שהדריבר ניתן הוא לא מוצא את אותו כפתור, אותו שדה,