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

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

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

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

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

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

עלייתו של JavaScript

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

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

גישות לפעולות אוטומטיות

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

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

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

WebDriver Classic ו-CDP.

WebDriver 'קלאסי' לעומת פרוטוקול Chrome DevTools (CDP)

WebDriver 'Classic' הוא תקן אינטרנט שנתמך בכל הדפדפנים המובילים. סקריפטים של אוטומציה שולחים פקודות באמצעות בקשות 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 DevTools

לדוגמה, לחיצה על רכיב 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 בגלל הארכיטקטורה השונה – הגרסה הקלאסית של WebDriver מבוססת על HTTP, ולכן קשה להירשם לאירועים בדפדפן ולהאזין להם. לעומת זאת, CDP מבוסס על WebSocket ותומך בהעברת הודעות דו-כיווניות כברירת מחדל.

השלב הבא: WebDriver BiDi

לפניכם סיכום של נקודות החוזק של WebDriver "Classic" ו-CDP:

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

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

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