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

מהן אפליקציות Qt?

אפליקציות Qt מפותחות באמצעות מסגרת Qt.Qt היא מסגרת חוצת-פלטפורמות מבוססת C++ המספקת מגוון רחב של כלים וספריות ליצירת ממשקי משתמש גרפיים (GUI) ורכיבי תוכנה אחרים עבור יישומי שולחן עבודה, מובייל ואינטרנט.

הגדול ביותר היתרון של אפליקציות Qt היא היכולת שלהם לפעול על מערכות הפעלה מרובות, כולל Windows, macOS, Linux, Android ו-iOS. עם אפליקציות Qt, מפתחים יכולים לכתוב קוד פעם אחת ולפרוס אותו על פני פלטפורמות שונות. אין צורך להתמודד עם שינויים משמעותיים בקוד.

בגלל הרבגוניות הזו, Qt נמצא בשימוש נפוץ בתעשיות שונות. הוא פופולרי במיוחד לבניית אפליקציות חוצות-פלטפורמות עם ממשקים גרפיים עשירים.

מהו Squish?

Squish הוא כלי בדיקה אוטומטי. הוא משמש בעיקר לבדיקת ממשקי משתמש גרפיים (GUIs) ביישומים שפותחו עם Qt. Squish הוא אחד מכלי הבדיקה העיקריים שלנו, בעיקר בשל היתרונות המשמעותיים שהכלי הזה מציע:

  • יכולות חוצות-פלטפורמות: Squish תומך במגוון רחב של פלטפורמות, כולל Windows, macOS, Linux/Unix, iOS, Android ומערכות משובצות שונות. כתוצאה מכך, אנו יכולים להשתמש באותם תהליכי בדיקה across פלטפורמות שונות.
  • תמיכה במגוון טכנולוגיות GUI: אנו משתמשים ב-Squish לבדיקת יישומים הבנויים בטכנולוגיות GUI שונות, כגון Qt, Java, Windows Forms, Web (HTML5/JavaScript) ועוד.
  • בדיקות אוטומטיותSquish יכול להשתלב בתהליכי CI/CD, מה שמאפשר בדיקות אוטומטיות ויעילות. בדרך זו נוכל להתמודד עם בעיות פוטנציאליות בשלב מוקדם של תהליך הפיתוח.
  • Squish GUI TesterSquish GUI Tester הוא כלי רב-תכליתי להרצת בדיקות אוטומטיות בתרחישים שונים, לרבות בדיקות אצווה מבוזרות ויישומים היברידיים. הוא תומך במספר שפות תסריט ומציע סביבה אינטואיטיבית להקלטה ולניגון חוזר, ובכך משפר את תהליך הבדיקה.

רוצים ללמוד עוד על הצעת שירותי Qt שלנו?

מידע נוסף

Squish for Qt – התמודדות עם מכשולים באוטומציה של QA

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

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

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

A screenshot showing a QtQuick code example with a Window component containing a Column, Repeater, Row, Switch, and dynamic Text elements. This type of QML structure is commonly used in Squish Qt UI test automation to demonstrate how to interact with repeated items, switches, and menu elements in a Qt application.

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

הפלט של הקוד שלעיל נראה כך:

A screenshot of the rendered QtQuick interface created with a Repeater element, displaying three rows labelled ‘Menu item 0,’ ‘Menu item 1,’ and ‘Menu item 2,’ each with a toggle-style switch component. This type of UI output is commonly used in Squish Qt automated testing to validate interactions with repeated QML elements and dynamic menu components.

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

לאחר פתיחת Squish ושימוש בבורר במתג שליד פריט התפריט 1, אנו מקבלים זאת כמילון מזהים:

A screenshot of a Squish Qt locator dictionary displaying JSON-like properties for a QML Switch component, including attributes such as ‘checkable,’ ‘id: button_switch,’ ‘occurrence,’ ‘type: Switch,’ and ‘visible.’ This output is used in Squish Qt test automation to identify and interact with specific UI elements in QtQuick applications.

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

עבודה עם בדיקות ממשק משתמש גרפי ב-Squish עבור Qt

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

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

A screenshot showing Python utility functions commonly used in Squish Qt test automation. The code defines getChildrenOfType() and getChildrenWithProperty(), which recursively traverse Qt/QML object hierarchies to locate child elements based on name or specific property values. These helpers support complex UI test scripting by enabling reliable object identification within nested QtQuick structures.

האתגר של אוטומציית בדיקות בממשקי משתמש עם אלמנטים חוזרים

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

ויזואליזציה של מבנה עץ QML

להלן עץ ה-QML המוצג ב-Squish עם האובייקט הרצוי שלך נבחר:

A screenshot of the Squish Qt ‘Application Objects’ view, displaying a full QML hierarchy including a main QML root object, columns, rows, switches, text elements, and a repeater. This tree view is used in Squish Qt to inspect and identify QtQuick components for automated UI testing, enabling testers to explore object types, IDs, and nested structures.

העץ הבינארי של זה נראה כך:

A binary-style QML object tree diagram with a ‘Main’ node at the top, followed by ‘Column,’ branching into three ‘Row 0’ nodes. Each row contains a button_switch_0 and a Text_1 element labelled ‘Menu item 0,’ ‘Menu item 1,’ and ‘Menu item 2.’ The graphic visualises the QML hierarchy used in Squish Qt UI test automation examples.

הרצת הקוד שלהלן יכולה לספק לנו הפניה מדויקת למתג הרצוי שלנו:

A screenshot of a Squish Qt test script highlighting how a text_menu_1 dictionary is used to identify related QML objects. The code demonstrates two approaches: using getChildrenOfType() to find a Switch beneath the text element, or getChildrenWithProperty() to match the child whose id is button_switch. This snippet illustrates practical locator strategies for automated UI testing in QtQuick applications.

שלב אחר שלב: כיצד פועל מעבר האובייקטים

כעת, הבה נבחן מקרוב את התהליך כולו:

  1. אנו עוברים במעלה עץ ה-QML לשורה 0 עם parent_container.parent ו-parent_count=1
  1. לאחר מכן, אנו יוצרים את הרשימה שלנו לאחסון הילדים שאנו מוצאים.
  1. לבסוף, אנו עוברים בלולאה על הילדים במכולה, ומחפשים את הסוג או המאפיינים הרצויים. אנו שומרים את כל האובייקטים המתאימים ברשימה, ולאחר מכן משתמשים ברקורסיה כדי לרדת לעומק, ולחפש נכדים וכו'.
  1. אנו מפיקים את התוצאות כרשימה (השתמשנו ב-[0] מכיוון שציפינו לילד יחיד המתאים לדרישות הרצויות שלנו).
A simple QML hierarchy diagram illustrating a single Row 0 node with two children: the button_switch_0 switch component and the Text_1 element labelled ‘Menu item 1.’ This visualisation is used in Squish Qt testing to explain why a list-style query returns a single matching child, accessed with index [0].

התגברות על מגבלות באוטומציה של ממשק משתמש עקב מזהים חסרים

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

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

תקציר

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

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

מחפשים צוות מנוסה שיכול לעזור לכם לפתח אפליקציית Qt או לבדוק אותה באמצעות Squish? אנחנו לשירותך. כדי ללמוד עוד על Squish for Qt, עיין ב- שירותי Qt או צרו איתנו קשר ישירות באמצעות הטופס שלהלן.

שאלות נפוצות

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

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

שלא כמו כלי אוטומציה לשימוש כללי, Squish נבנה במיוחד לבדיקות GUI ובעל אינטגרציה עמוקה עם Qt. הוא תומך ב-QML, ב-Qt Widgets ובממשקים היברידיים, ומספק תכונות סקריפטינג מתקדמות ב-Python, JavaScript ושפות נוספות. Froglogic (כיום חלק מ-The Qt Company) מבטיחה תמיכה מקורית ועדכונים תכופים המותאמים ל-Qt.

בהחלט. ניתן לשלב את Squish בכלי CI/CD פופולריים כגון Jenkins, GitLab CI או Azure DevOps. הדבר מאפשר בדיקות GUI רציפות ואיתור באגים מוקדם, מאיץ לולאות משוב בסביבות פיתוח אג'יליות ומשפר את איכות התוכנה הכוללת.