
driver.manage().timeouts().implicitlyWait. אם האלמנט לא נמצא, יש זמן סבלנות (למשל חמש שניות) לפני שנזרקת שגיאה. זה מגביר את יציבות הטסטים.Thread.sleep במילי-שניות. הטסט עוצר, מחכה ואז ממשיך. פשוט מאוד, אבל קבוע.WebDriverWait wait = new WebDriverWait(driver, timeInSeconds).wait.until(ExpectedConditions...) עם תנאי כמו visibilityOfElementLocated או elementToBeClickable, ו-locator של By.id.sendKeys.הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת טסטים - סינכרון - המתנה לטעינת אלמנטים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם בסרטון הקרוב נדבר על סינכרוניזיישן או איך נוודא שאלמנטים מופיעים באפליקציה באחרון אנדרואיד לפני שאנחנו מנסים לזהות אותם או לבצע עליהם איזושהי פעולה כמו קליקס אנד קיז גט טקסט וכדומה הסינכרוניזיישן זה מושג שמלווה אותנו גם מהסילניום שאנחנו בודקים על דפדפן
רגיל על בראוזר ובדרייבר רגיל כלומר סינכרוניזיישן הצורך שלנו לפעמים להשעות את הבדיקה או להיות סלחנים מבחינת זיהוי האלמנטים מלווה אותנו גם בשלב של הסלניום עצמו ב-WebDriver.
כלומר, אנחנו רוצים לתת איזשהו גרייס, איזושהי המתנה, איזושהי בדיקה חוזרת לפני שאנחנו מנסים ופונים אל אלמנט.
כמובן, אני רוצה להזכיר שאם אלמנט לא קיים או אלמנט לא מופיע או האינספקטור שלנו, הזיהוי שלנו, Find Element by ID or by Expat or by CSS Selector היינו נכון הסינכרוניזיישן לא יעזוב אנחנו נקבל את האקספשן שהאלמנט אינו נמצא והדרייבר בעצם לא יצליח לאתר אותו בתוכו. כשאנחנו מדברים על סינכרוניזיישן בסלניום שזה יכול
להיות גם סלניום משולב באפיום בבדיקות מובייל, בבדיקות אנדרואיד, בבדיקות דיווייזים, בבדיקות אפליקציה מובייל השיטה הראשונה היא Implicit Wait מה מה זה אומר האימפליסיט וייט?
כשאנחנו מדברים על אימפליסיט וייט, זוהי הגדרה כללית שאנחנו עושים אותה או קובעים אותה באופן גורף עבור כל דבר שקורה בזיהוי אובייקטים דרך הדרייבר.
כלומר, דרך דרייבר מנאג' טיים-אאוטס, אימפליסיט וייט, אנחנו קובעים זמן כללי של גרייס, שזה אומר שברגע שקורה איזשהו אי-זיהוי או ניסיון של הדרייבר לפנות לאלמנט בתוכו, ושהוא לא מצליח לאתר אותו, יש לנו איזשהו באפר, איזשהו זמן כזה, חמש שניות לדוגמה, שאנחנו נותנים למערכת לטעון שוב את האלמנט,
את האפשרות לטעון שוב את האלמנט, ורק אז אנחנו ניגשים ובודקים עוד פעם. עכשיו, החמש שניות האלה זה מין wait די נוקשה, שמחכים, בודקים שוב האם זיהינו את האלמנט הזה או לא, דרך האינספקט או דרך אסטרטגיית הזיהוי שלנו אם הצלחנו לזהות הטסט ממשיך אם לא הצלחנו אז הוא פונה לאקספצ'ן
של אי מציאת האלמנט בתוך הדרייבר מה שזה אומר זה אומר שיש איזשהו טולרנטיות איזושהי סבלנות מצד הדרייבר לזיהוי של אלמנטים וזה מגביר את היציבות של הטסטים שלנו אז implicit weight זה דבר שאנחנו מאוד רוצים לקבוע ולהגדיר ולהשתמש בו שימו לב לא צריך לעשות זמן יותר מדי גדול באימפליסיט ווייט כדי לא
לגרום להמתנה מיותרת. הרבה פעמים חלקיקי שניות מספיקים ולכן אין צורך לעשות משהו שיותר מחמש שניות מבחינת האימפליסיט ווייט הגרוע.
שיטת סנכרון נוספת שיש ביכולתנו לבצע היא שיטה סטטית, אולי השיטה הטריוויאלית ביותר. כלומר, אנחנו יכולים להוסיף בעזרת הקלאס טרד או האובייקט טרד אנחנו יכולים להוסיף איזושהי השהיה לטסט שלנו, טרד נקודה סליף וזמן במילי סקנד, מילי שניות,
בעצם יגרום לטסט שלנו לעצור, לחכות ואז להמשיך את הזרימה שלו. כלומר, טרד נקודה סליף זה כלי מאוד מאוד שימושי, מאוד מאוד קליל ופשוט להשתמש כשאנחנו רוצים להיות בטוחים שההמתנה שלנו אכן צריכה להיות ארוכה יותר, כדי לזהות אלמנטים, לזהות איזשהם אובייקטים באפליקציה או בדפדפן או ב-WebDriver שאנחנו
עובדים איתו. אז Thread.slip זה משהו שאנחנו מוסיפים בקלות תוך כדי הריצה, ועל ידי כך בעצם המערכת עוצרת, מחכה, פונה לגורם החיצוני של ההמתנה, של השעון שניות, ובעצם סופרת שלוש שניות לדוגמה במקרה הזה, המתנה סטטית,
ואז ממשיכה ומנסה למצוא את האלמנט שאנחנו רוצים על ידי driver.findElementByID ולראות באמת אם האלמנט נמצא.