איך להשתמש ב-JavaScriptExecutor ב-Selenium

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

עם זאת, יש תרחישים בהם הפקודות האמיתיות של Selenium WebDriver לא עובדות כפי שצפוי, מכיוון שסלניום אינו יכול להתקשר ישירות עם WebElements. זהו המקום בו יוצא JavaScriptExecutor לפועל.

בבלוג זה, אנו מדברים על JavaScriptExecutor בסלניום ואיך להתחיל עם מקרי שימוש ודוגמאות מעשיות.

מהו JavaScriptExecutor בסלניום?

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

ה-JavaScriptExecutor בסלניום ניתן לשימוש ישירות על ידי יבוא החבילה הבאה בתוך סקריפטי בדיקות האוטומציה:

Java

 

JavaScriptExecutor בסלניום מספק שתי שיטות להתקשר עם WebElements:

  • executeScript() – שיטה זו מבצעת קוד JavaScript בהקשר של החלון או המסגרת שנבחרה כרגע בסלניום. הקוד יורץ כגוף של פונקציה אנונימית.
  • executeAsyncScript()  פעולה זו מבצעת קטע קוד JavaScript אסינכרוני בהקשר של החלון או המסגרת שנבחרו כעת ב־Selenium. הסקריפט יופעל כגוף של פונקציה אנונימית.

הערה: ההבדל המרכזי בין executeScript() ובין שיטות executeAsyncScript() הוא שהסקריפט שנקרא באמצעות executeAsyncScript() חייב להפעיל הודעה על השלמת הביצוע באמצעות הפונקציה callback().

קריאות לשיטות באמצעות executeAsyncScript() נעשות בעיקר כאשר יש צורך בהשהיית בדיקה בדפדפן שבו נבדק או כאשר יש לסנכרן בתוך אפליקצית AJAX.

למה להשתמש ב־JavaScriptExecutor ב־Selenium?

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

  1. Selenium אינו מתקשר ישירות עם אלמנטי ה־Web
  2. ביצוע פעולות כגון גלילה אל תוך התצוגה, לחיצה על אלמנטי ה־Web שמוסתרים מאחורי העטיפה, או הגדרת ערכים בשדות קריאה בלבד
  3. ביצוע התנהגויות ספציפיות לדפדפן כגון שינוי דומיננטי באופן דינמי

במקרים אלה, אנו נעזרים ב־JavaScriptExecutor ב־Selenium.

באופן מסורתי, אנו משתמשים באיתותי Selenium כגון זיהוי על פי זיהוי על פי ID, שם, בורר CSS, XPath וכו', כדי לאתר אלמנט רשת. אם איתותים אלו אינם עובדים, או שאתה מתמודד עם XPath מסובך, במקרים כאלה, JavaScriptExecutor עוזר לאתר את אלמנט הרשת הרצוי.

יש מקרים שבהם שיטת click() עשויה שלא לעבוד בכל הדפדפנים, או שבקרי הרשת עשויים להתנהג באופן שונה בדפדפנים שונים. כדי להתגבר על מצבים כאלה, עליך להשתמש ב-JavaScriptExecutor לבצע פעולת לחיצה.

כפי שאנו יודעים, לדפדפנים יש מימוש של JavaScript בתוכם והם יכולים להבין פקודות JavaScript. לכן, הבנת JavaScriptExecutor ב-Selenium תאפשר לנו לבצע טווח של פעולות בצורה יעילה יותר.

יסודות של JavaScriptExecutor ב-Selenium

מטרת סעיף זה היא לספק רעיון ברמה גבוהה על שלבי היישום של JavaScriptExecutor ב-Selenium. לצורך הדגמה, נשתמש ב-Java כשפת התכנות המועדפת.

בואו נצפה בשלבים המרכזיים.

1. יבוא את החבילה הקשורה ל-JavaScriptExecutor:

Java

 

2. השתמש ב-JavaScriptExecutor, צור הפנייה לממשק והקצה אותה למופע של WebDriver על ידי המרה סוגית:

Java

 

3. קרא לשיטת executeAsyncScript() או executeScript() . לדוגמה, התחביר עבור executeScript()  ניתן למצוא למטה:

Java

 

דמו: שימוש ב־JavaScriptExecutor ב־Selenium

לפני שנצפה איך להשתמש ב־JavaScriptExecuter ב־Selenium, עקוב אחר הדרישות האלה:

  • צור פרויקט Maven חדש באמצעות IntelliJ IDE
  • הוסף את תלות Selenium WebDriver האחרונה ב־pom.xml
  • הוסף את תלות TestNG האחרונה ב־pom.xml

נשתמש באתר LambdaTest eCommerce Playground כדי להדגים את פעולת JavaScriptExecutor ב־Selenium על ידי הרצת הבדיקות על דפדפן Chrome מקומי.

תרחיש בדיקה 1

המטרה שלנו היא לכתוב קוד פשוט להמחשה באמצעות שימוש בשיטת executeScript() בתרחיש הבדיקה הבא.

  1. נווט לדף כניסה לחשבון של אתר LambdaTest eCommerce Playground.
  2. הזן פרטי כניסה חוקיים ולחץ על כפתור הכניסה על ידי הדגשת השדה במסגרת אדומה.
  3. הדפס את כותרת הדף ואת שם הדומיין.
  4. אמת כי כותרת הדף "החשבון שלי" מוצגת בהצלחת כניסה.

מימוש

צור מחלקת TestJavaScriptExecutor חדשה ליישום תרחיש הבדיקה. ניצור שני שיטות במחלקת הבדיקה הזו שיאפשרו לנו להתקין ולסיים בצורה תדירה את הסשן של Selenium WebDriver.

בואו נגדיר את WebDriver כפומה ברמת המחלקה מאחר ונזדקק לו בשתי השיטות, כלומר בשיטת setup(), כדי להתחיל את הסשן של הנהג ובשיטת tearDown() כדי לסיים בצורה תדירה את הסשן.

Java

 

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

Java

 

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


Java

 

לבסוף, כאשר הבדיקה מורצת, שיטת tearDown() תיקרא, ותסגור את הסשן של RemoteWebDriver בצורה תדירה.

בואו נוסיף כעת שיטת testJavaScriptExecutorCommand() באותה מחלקת בדיקה כדי ליישם את תרחיש הבדיקה שדנו בו.

Java

 

הקוד מנווט לדף ההתחברות של אתר אימולטור המסחר האלקטרוני של LambdaTest. השורה הבאה משנה את מופע ה-WebDriver ל-JavascriptExecutor כך שפקודות JavaScript יכולות להיבExecuted בדפדפן.

Java

 

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

Java

 

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

Java

 

באופן דומה, כפתור ההתחברות ממוקם באמצעות אסטרטגיית CSS Selector ומודגש גם כן.

Java

 

כותרת העמוד ושם הדומיין ממוקמים ליד כך שמשתמש ב-JavaScriptExecutor ומודפסים בקונסולה.

Java

 

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

כאן קוד מלא מהמחלקה TestJavaScriptExecutor:

Java

 

בדיקת ביצוע

בצילום המסך הבא מ-IntelliJ IDE מוצג שהבדיקה הושלמה בהצלחה.

תרחיש בדיקה 2

המטרה שלנו היא לכתוב קוד פשוט להמחיש דוגמה בשימוש בשיטת executeAsyncScript() באמצעות תרחיש בדיקה הבא.

  1. נווט לאתר LambdaTest eCommerce Playground.
  2. גלול לתחתית עמוד הבית.
  3. אסרט כי הטקסט "FROM THE BLOG" מוצג בסעיף התחתון של העמוד.

יישום:

צור שיטת testExecuteAsyncScript() חדשה במחלקת הטקסט הקיימת TestJavaScriptExecutor.

Java

 

הקוד ינווט לדף הבית של אתר משחק האיקומרס LambdaTest. השיטה executeAsyncScript() של JavaScriptExecutor תיקרא לאחר מכן, ותבצע את הפעולה לגלילת החלון.

בשיטת executeAsyncScript(), הסקריפטים שמופעלים צריכים להזהית באופן ברור כי הם סיימו על ידי קריאה לשיטת callback() המסופקת.

Java

 

לאחר גלילה לתחתית החלון, יימצא הטקסט "FROM THE BLOG", ויעשה אסרציה עליו.

Java

 

ביצוע הבדיקות

הלקוי מראה שהבדיקה בוצעה בהצלחה.

פקודות לשימוש ב-JavaScriptExecutor ב-Selenium

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

כדי ללחוץ על כפתור:

Java

 

כדי להקליד טקסט בתיבת טקסט בלי להשתמש בשיטת sendKeys() מה לעשות:

Java

 

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

Java

 

כדי לייצר חלון התראה מופתח ב-Selenium WebDriver:

Java

 

כדי לרענן את חלון הדפדפן באמצעות JavaScript:

Java

 

כדי לקבל את הטקסט הפנימי של כל הדף באתר ב-Selenium:

Java

 

כדי לקבל את כותרת הדף ברשת:

Java

 

כדי לקבל את שם הדומיין:

Java

 

כדי לקבל את כתובת ה-URL של דף ברשת:

Java

 

כדי לקבל את הגובה והרוחב של דף ברשת:

Java

 

כדי לנווט לדף אחר באמצעות JavaScript:

Java

 

כדי לבצע גלילה על אפליקציה באמצעות Selenium:

  • כדי לגלול את העמוד אנכית ל-500 פיקסלים:
    Java

     

  • כדי לגלול את העמוד אנכית עד הסוף:
    Java

הוספת אלמנט במודל האובייקטים של מסמך (DOM):

Java

 

כדי לקבל את ה-שורש הצל ב- DOM:

Java

 

מסקנה

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

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

Source:
https://dzone.com/articles/how-to-use-javascriptexecutor-in-selenium