Nightwatchהוא פריימוורק אשר נכתב ב-Node.js ומשתמש ב-W3C Webdriver לצורך ביצוע בדיקות אוטומטיות מקצה לקצה, ביישומי ווב ואתרי ווב התומכים בכל הדפדפנים המפורסמים. הפריימוורק פותח ע"י Andrei Rusu בשנת 2014. בנוסף לבדיקות קצה לקצה (E2E) ניתן לבצע בדיקות יחידה ובדיקות אינטגרציה של HTTP API's. ניתן לשלב בדיקות E2E עם בדיקות יחידה/בדיקות אינטגרציה באותה ריצת בדיקה. הגרסה העדכנית הוא 2.0.7.
עם כל האהבה שלי לבדיקות ידניות, הייתי סקרנית אם אני יכולה לכתוב טסטים בעזרת Nightwatch ולהפתעתי הצלחתי לכתוב כמה טסטים כדי לתת לכם תמונת מצב. הפריימוורק מפעיל את הדפדפנים בעזרת שרת סלניום. ניתן לעבוד במחשב מקומי או דרך שירותי ענן, ניתן לעבוד עם דוקר על שרתי סלניום גם בשתי האפשרויות, במחשב המקומי או דרך שירותי ענן.
תכונות מרכזיות
התקנות
ההתקנה דורשת מספר פעולות פשוטות.
בשלב הראשון נבצע את התקנה של java ו-Node.js
https://www.java.com/en/download/help/download_options.html
https://nodejs.org/en/download/
אני בחרתי לעבוד עם העורך קוד VS Code.
הקובץ package.json יווצר על ידי הפקודה:
npm init -y
כדי להתקין את הגרסה האחרונה של Nightwatch יש להריץ את הפקודה:
npm install nightwatch
הקובץ nightwatch.conf.js יווצר על ידי הרצת הפקודה
npx nightwatch
שלב הבאה התקנת Selenium:
נריץ את הפקודה
npm install selenium-server
אני בחרתי להשתמש בדפדפני Chrome ו-Firefox, כמובן אפשר להשתמש גם Safari ו-Edge:
npm install chromedriver geckodriver
עכשיו אנו יכולים להתחיל לכתוב את הטסט הראשון.
כתיבת טסט ראשון
אני ממליצה בהתחלה להתנסות באתרים שאין להם צורך ביותר מדי המתנות בין הדפים.
שלב ראשון נעדכן את קובץ nightwatch.conf.js על ידי הוספת שם ונתיב התיקייה בה נמצאים קבצי הבדיקות.
src_folders:[“./test”]
אהבתי לעבוד עם page objects דבר אשר בהמשך אתייחס אליו. בעיקרון רציתי להריץ בדיקות באתר של הפריימוורק.
להפתעתי פעולות פשוטות כמו פתיחת דפדפן, הכנסת טקסט לשדה חיפוש או מחיקת טקסט לא היה מסובך. על ידי פונקציות בסיסיות כגון:Drop-Down, WaitingForElement ,Navigation Pause Click, Text Input, Keys, יכולתי לבצעה פעולות על האלמנטים. לאחר מציאת אלמנטים ב-DevTools והגדרת CSS selector או-XPath בקוד או בקובץ nightwatch.conf.js והרצתם מטרמינל החזיר לי תוצאה שרציתי.
Assertion and Expext
ניתן להשתמש בשתי הספריות המובנות Assert ו-Verify. ההבדל בין שתיהן הוא כש-assertion נכשל במקרה של Assertion הטסט עוצר ובמקרה של Verify הטסט מייצר לוג וממשיך לבצעה את השאר ה-Assertions.
בסיס ספריית Chai Expect, ניתן להשתמש ב-expect namespace.
בשימוש expect ניתן לכתוב קוד בשרשור בסגנון ממשק BDD על ידי:
browser.expect.element(‘#main’).text.to.contain(‘Testing World Magazine’).before(1000)
browser.expect.element(‘#main’).text.to.not.contain(‘Testing World Magazine’).after(400)
תמיכה בשירותי ענן
BrowserStack ו-Sauce Labs הן פלטפורמות אשר ניתן להריץ בעזרתם כמות גדולה של בדיקות עם סוגים שונים של דפדפנים ומערכות הפעלה.
עבודה עם Page Object Model
POM (Page Object Model)מאפשר לנו לנהל את הבדיקות שלנו בצורה יותר מסודרת.
נהוג לעבוד עם שתי תיקיות, אחת עבור הבדיקות, אפשר לקרוא tests שיכול להכיל פקודות כמו before after, beforeEach ו-afterEach שמאפשר סדר הרצה, והשני עבור ניתוב ופונקציות שמשתמש במציאת אלמנטים עם שימוש בסלקטורים שניתן לקרוא בשם pages.
כמובן צריך להגדיר בקובץ package.json:
“Page_objects_path”: [“pages”]
הרצת טסטים
ניתן להריץ טסט בודד, כל הטסטים תחת תיקייה ספציפית או רק פונקציה יחידה. במקרה של הרצה של כל הטסטים קיימות מספר אפשרויות, כגון לתת שם של הטסט ולדלג, להגדיר tag בקוד ולהריץ טסטים שיש להם תאגים מסויים או ע"י group להריץ קבוצה של טסטים.
ניתן להריץ את הטסטים ללא פתיחת דפדפן במצב headless, לפי tag שהוגדר בקוד, לפי תיקייה או לפי קובץ שנקרא test suite.
npx nightwatch tests/first-ex.js -e chrome --headless
npx nightwatch -e chrome -g tests
npx nightwatch -e chrome –tag
צילומי מסך
ניתן לקבל צילומי מסך של הדף שלם בתיקיה הרצויה ע"י :
saveScreenshot(path/to/fileName.png)
או לקבל צילום מסך של חלק הרצוי ע"י:
takeElementScreenshot()
קבלת דוחות
קיימים שני סוגי דוחות ב-Nightwatch. הראשון הוא stdout ניתן לקבל בטרמינל והשני קבצי xml
שנוצרו ע"י JUnit output בשימוש Jenkins CLI.
Nightwatchמאפשר גם לייצר דוחות מותאמות על ידי Reporter
יתרונות
חסרונות
ציון
מענה לצרכים של החברה 7/10
נותן למשתמש חווית שימוש 9/10
תמיכה וקהילה 8/10
סה"כ 8