דלג לתוכן
חזור

אוטומציית בדיקות - לכידת Console Logs ושגיאות JavaScript עם Selenium WebDriver BiDi בפייתון

פורסם:

מבוא

פרוטוקול WebDriver BiDi (דו-כיווני) מייצג התפתחות משמעותית של WebDriver Classic, ומשלב בצורה חלקה יכולות עוצמתיות מפרוטוקול ה-Chrome DevTools (CDP). שיפור ארכיטקטוני זה מאפשר תקשורת דו-כיוונית אמיתית בין צד הלקוח (הבדיקה) לדפדפן, ופותח יכולות מתקדמות לרישום לוגים, יירוט תעבורת רשת וניטור ביצועים ישירות מתוך תסריטי הבדיקות.

בעוד ש-Java נהנית ממימוש BiDi מקיף יותר עם תמיכה רחבה במגוון תכונות, המימוש בפייתון עדיין נמצא בפיתוח פעיל, ויכולות מתקדמות מסוימות כמו יירוט רשת וטיפול בשינויי DOM עדיין לא הגיעו לרמת הבשלות הקיימת ב-Java.

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

היתרונות של שימוש ב-BiDi לרישום לוגים

הודעות Console (Console messages) בדפדפן כוללות את כל הפלטים הנוצרים באמצעות console.log, console.error, console.warn, console.info ומתודות דומות. הודעות אלו משמשות כ”פירורי לחם” מכוונים שהמפתחים משאירים כדי לעקוב אחר זרימת הביצוע של האפליקציה. כאשר בדיקת רשת נכשלת, הודעות אלו מספקות הקשר חיוני לגבי:

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

כאשר תסריט בדיקה נכשל, קיום תיעוד מקיף של הודעות Console ושגיאות JavaScript מספק מידע יקר ערך. ללא תיעודים אלו, מהנדסי QA נתקלים לעתים קרובות בסיטואציה המתסכלת של “עובד אצלי במכונה”, מה שמקשה על פתרון כשלים אקראיים שלא ניתן לשחזר באופן מקומי.

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

מימוש הפתרון

את קוד הפתרון ניתן למצוא כאן.

באמצעות BiDi, אנו יכולים ליירט את הלוגים הללו בזמן אמת:

console_messages = []
javascript_errors = []

driver.script.add_console_message_handler(
    lambda log_entry: console_messages.append(log_entry.__dict__)
)

driver.script.add_javascript_error_handler(
    lambda log_entry: javascript_errors.append(log_entry.__dict__)
)

מטפלי אירועים (Event handlers) בהקשר זה הם פונקציות שמופעלות אוטומטית כאשר מתרחשים אירועי דפדפן ספציפיים, כגון פלטי Console או חריגות JavaScript. הם מאפשרים איסוף לוגים אוטומטי מבלי לשנות את קוד האפליקציה הנבדקת.

אם בדיקה נכשלת וישנם יומני Console או שגיאות JavaScript שנלכדו במהלך הביצוע, תיעודים אלו יצורפו לדוחות Allure, ויסייעו באבחון מהיר יותר. אם אין תיעודים, לא יצורפו קבצים.

if console_messages:
    allure.attach(
        body=json.dumps(console_messages, indent=4),
        name="Console Logs",
        attachment_type=allure.attachment_type.JSON,
    )

if javascript_errors:
    allure.attach(
        body=json.dumps(javascript_errors, indent=4),
        name="JavaScript Errors",
        attachment_type=allure.attachment_type.JSON,
    )

סיכום

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

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

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

בדיקות מהנות!


הציעו שינויים

מוכנים לבנות את מפת הדרכים שלכם? נתחיל כאן


הפוסט הקודם
שיטות עבודה מומלצות באוטומציית בדיקות: נעילת גרסת דפדפן ב-Selenium Python ליציבות
הפוסט הבא
אוטומציית בדיקות - אופטימיזציה של דוחות בדיקה של Playwright: איחוד אוטומטי של תוצאות Allure עם GitHub Actions