מבוא
הבטחת תאימות דפדפנים היא חיונית לשמירה על יציבות הבדיקות בעת הרצת בדיקות Selenium בתהליך CI/CD. לאחרונה, בעת ביצוע בדיקות בפרויקט הדוגמה שלי Selenium Python example project, נתקלתי בבעיה קריטית הקשורה ל-ChromeDriver v133 ו-Xvfb. בעיה זו מנעה מ-Selenium להריץ קוד JavaScript כראוי, וגרמה לבדיקות להיכשל באופן בלתי צפוי.
במאמר זה, אדריך אתכם דרך הבעיה, שורש הבעיה, והפתרון שיישמתי כדי לשחזר את הרצת הבדיקות.
הבעיה
במהלך הרצת בדיקה, צפיתי בפלט הלוג הבא בריצה של GitHub actions workflow run:
# Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:50993/session/01e31cbf77e7238684724826bb105caf/window/maximize {}
# Response
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=500 | data={
"value": {
"error": "unknown error",
"message": "unknown error: JavaScript code failed\nfrom unknown command: 'Runtime.evaluate' wasn't found\n (Session info: chrome=133.0.6943.53)",
"stacktrace": "#0 0x5596c07f609a <Unknown>\n"
"#1 0x5596c02bd8b0 <Unknown>\n"
"#2 0x5596c02a3e51 <Unknown>\n"
"#3 0x5596c02a26fd <Unknown>\n"
"#4 0x5596c02a2eaf <Unknown>\n"
"#5 0x5596c02d1757 <Unknown>\n"
"#6 0x5596c02c66b1 <Unknown>\n"
"#7 0x5596c02c65a8 <Unknown>\n"
"#8 0x5596c029477a <Unknown>\n"
"#9 0x5596c0292be4 <Unknown>\n"
"#10 0x5596c036f5cf <Unknown>\n"
"#11 0x5596c0334982 <Unknown>\n"
"#12 0x5596c035ab8b <Unknown>\n"
"#13 0x5596c0334753 <Unknown>\n"
"#14 0x5596c030038e <Unknown>\n"
"#15 0x5596c0301b51 <Unknown>\n"
"#16 0x5596c07bf76b <Unknown>\n"
"#17 0x5596c07c36f2 <Unknown>\n"
"#18 0x5596c07ab8fc <Unknown>\n"
"#19 0x5596c07c42e4 <Unknown>\n"
"#20 0x5596c078f9cf <Unknown>\n"
"#21 0x5596c07e4cd8 <Unknown>\n"
"#22 0x5596c07e4eb6 <Unknown>\n"
"#23 0x5596c07f4f16 <Unknown>\n"
"#24 0x7f5c4fc9caa4 <Unknown>\n"
"#25 0x7f5c4fd29c3c <Unknown>\n"
}
} | headers=HTTPHeaderDict({
'Content-Length': '1096',
'Content-Type': 'application/json; charset=utf-8',
'cache-control': 'no-cache'
})
המסקנה העיקרית מלוג השגיאה הזה הייתה:
- Selenium Manager זיהה את Chrome v133 וניסה להשתמש ב-ChromeDriver v133 המתאים.
- בעת ניסיון להריץ JavaScript באמצעות
Runtime.evaluate
, ChromeDriver החזיר שגיאה לא ידועה. - בעיה זו קשורה ככל הנראה ל-
Xvfb
, המשמש בדרך כלל להרצת דפדפנים ללא ראש בסביבות CI/CD מבוססות לינוקס. - הגדלת חלון הדפדפן ב-Selenium נכשלת ב-Chrome v133 בסביבות לינוקס, כפי שדווח על ידי משתמשים אחרים בקהילת אוטומציית הבדיקות.
הפתרון
קוד הפתרון נמצא כאן.
לאחר דיבוג הבעיה, גיליתי של-Chrome v133 קיימת בעיית תאימות בשימוש עם Xvfb בבדיקות Selenium. הפתרון הפשוט ביותר היה לנעול את גרסת הדפדפן ל-v132 באמצעות הגדרת גרסת הדפדפן המובנית של Selenium.
כך פתרתי את הבעיה:
chrome_options.browser_version = "132"
למה זה עובד
על ידי הגדרה מפורשת, אנו מורים לSelenium Manager’:
- להוריד ולהשתמש ב-ChromeDriver v132, שידוע שעובד באופן אמין.
- לוודא שגרסת Chrome המותקנת תואמת ל-ChromeDriver v132, ובכך למנוע בעיות תאימות.
- להימנע מההתנהגות הבעייתית שנצפתה ב-Chrome v133, ובכך לשחזר הרצת בדיקות יציבה.
מסקנות עיקריות
- ודא גרסאות דפדפן ודרייבר כאשר נתקלים בכשלים בבדיקות.
- השתמש באפשרות של Selenium Manager לציין גרסה יציבה בעת הצורך.
- הישאר מעודכן לגבי בעיות ידועות עם גרסאות דפדפן חדשות, במיוחד בסביבות ללא ראש כמו
Xvfb
. - אם הגדלת חלון הדפדפן נכשלת בסביבות לינוקס, שקול להשתמש בחלופה עד שיהיה תיקון זמין.
סיכום
מימוש פתרון זה פתר את הבעיות בבדיקות ה-Selenium שלי. אם אתם חווים אתגרים דומים בריצות האוטומציה שלכם, שקלו לנעול את גרסת הדפדפן שלכם כדי לשמור על יציבות.
בדיקות מהנות!