מבט לאחור בזמן: התפתחות האוטומציה של בדיקות

תחילת האוטומציה של הבדיקות

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

שני הפרויקטים האלה איחדו כוחות בשנת 2011 כ-Selenium WebDriver וב-2018 הפכו לתקן W3C. אנחנו בדרך כלל קוראים לו WebDriver או WebDriver "קלאסי".

האבולוציה של פרויקט Selenium WebDriver.
ההתפתחות של פרויקט Selenium WebDriver

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

עליית JavaScript

ככל שפיתוח האינטרנט התפתח והסתמך יותר על JavaScript, פותחו פתרונות אוטומציה חדשים כגון WebdriverIO, Appium, Nightwatch, Protractor (הוצא משימוש), Testcafe, Cypress, Puppeteer ו-Playwright.

כלי אוטומציה של JavaScript.
כלי אוטומציה של JavaScript

שיטות אוטומציה

באופן כללי, ניתן לארגן את הכלים האלה בשתי קבוצות עיקריות על סמך האופן שבו הם הופכים דפדפנים לאוטומטיים:

  • רמה גבוהה: כלים שמפעילים JavaScript בתוך הדפדפן. לדוגמה, ב-Cypress וב-TestCafe נעשה שימוש בממשקי API לאינטרנט וב-Node.js כדי להריץ בדיקות ישירות בדפדפן. עובדה משעשעת – גם הגרסה הראשונה של סלניום השתמשה באותה גישה.
  • רמה נמוכה: כלים שמפעילים פקודות מרחוק מחוץ לדפדפן. במקרים שבהם כלים דורשים שליטה גדולה עוד יותר, כמו פתיחת מספר כרטיסיות או הדמיית מצב מכשיר, צריך להריץ פקודות מרחוק כדי לשלוט בדפדפן באמצעות פרוטוקולים. שני הפרוטוקולים העיקריים לאוטומציה הם WebDriver 'הגרסה הקלאסית' ו-Chrome DevTools Protocol (CDP).

בקטע הבא נבחן את שני הפרוטוקולים כדי להבין את היתרונות והמגבלות שלהם.

WebDriver Classic ו-CDP

WebDriver "קלאסי" לעומת פרוטוקול של כלי הפיתוח ל-Chrome (CDP)

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

יש לה תמיכה מצוינת בדפדפנים שונים וממשקי ה-API שלה מיועדים לבדיקה, אבל היא יכולה להיות איטית ולא תומכת באמצעי בקרה מסוימים ברמה נמוכה.

WebDriver 'קלאסי'.
WebDriver 'קלאסי'

לדוגמה, נניח שיש לך סקריפט לבדיקה לוחץ על רכיב await coffee.click();. הוא מתורגם לסדרה של בקשות HTTP.

# WebDriver: Click on a coffee element

curl -X POST http://127.0.0.1:4444/session/:element_id/element/click
   -H 'Content-Type: application/json'
   -d '{}'

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

עם זאת, הוא פועל רק בדפדפנים המבוססים על Chromium, והוא לא תקן פתוח. נוסף על כך, ממשקי API של CDP מורכבים יחסית. במקרים מסוימים, העבודה עם CDP היא לא ארגונומית. לדוגמה, העבודה עם iframes שאינם בתהליך דורשת הרבה מאמץ.

CDP.
פרוטוקול כלי הפיתוח ל-Chrome

לדוגמה, לחיצה על אלמנט await coffee.click(); מתורגמת לסדרה של פקודות CDP.

// CDP: Click on a coffee element

// Mouse pressed
{ 
  command: 'Input.dispatchMouseEvent', 
  parameters: {
    type: 'mousePressed', x: 10.34, y: 27.1, clickCount: 1 }
}

// Mouse released
{ 
  command: 'Input.dispatchMouseEvent', 
  parameters: {
    type: 'mouseReleased', x: 10.34, y: 27.1, clickCount: 1 }
}

מהם אמצעי הבקרה ברמה הנמוכה?

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

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

  • תיעוד הודעות במסוף
  • יירוט בקשות רשת
  • הדמיה של מצב מכשיר
  • הדמיה של מיקום גיאוגרפי
  • ופעולות נוספות.

זה לא היה אפשרי ב-WebDriver 'הגרסה הקלאסית' בגלל הארכיטקטורה השונה – WebDriver 'הגרסה הקלאסית' מבוססת על HTTP, ולכן קשה להירשם לאירועי דפדפן ולהאזין להם. לעומת זאת, CDP מבוסס על WebSocket, ותומך בהעברת הודעות דו-כיווניות כברירת מחדל.

השלב הבא: WebDriver BiDi

לפניכם סיכום של היתרונות של WebDriver 'קלאסי' ו-CDP:

WebDriver "קלאסי" פרוטוקול כלי הפיתוח ל-Chrome (CDP)
התמיכה הטובה ביותר לדפדפנים שונים העברת הודעות מהירה, דו-כיוונית
תקן W3C שליטה ברמה נמוכה
לבדיקה

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

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