جميع حزم المصدر المفتوح
الأدواتSwift

iOS-Testing-Automation-Framework

روبوتات (robots)، ولوكيترات (locators) ذاتية الإصلاح (self-healing)، وفروقات screenshot، وتدقيقات إمكانية الوصول (accessibility audits)، وتقارير CI لـ XCUITest.

3النجومآخر إصدار: v2.0.0 · آخر تحديث: 15 أكتوبر 2026
الأنظمة الأساسية:iOS 17macOS 14

الترخيص: MIT

حزمة Swift بلا اعتماديات لاختبارات UI واختبارات الوحدة (unit tests) في تطبيقات iOS وmacOS. في XCUITest تضيف روبوتات، وعمليات بحث (lookups) تنجو من تغيير اسم accessibility identifier، وتدقيق إمكانية وصول، ومقارنة screenshot بصورة فرق (difference image)، وتقارير JUnit وMarkdown لـ CI. في أي test target، سواء Swift Testing أو XCTest، تضيف لقطات (snapshots) SwiftUI، وانتظارات polling، وretries، وspies، وبيانات اختبار مزروعة (seeded). القواعد التي تقف خلف هذه المساعدات (helpers) هي Swift صِرف ومغطّاة بـ unit tests؛ طبقة XCUITest تُختبَر عبر اختبارات UI لتطبيق مثال على محاكي iPhone.

الميزات

  • روبوتات: صنف (class) واحد لكل شاشة، تنتظر إجراءاتها (actions) حتى يصبح العنصر hittable، وتظهر كخطوات مُسمَّاة في تقرير اختبار Xcode، وتُسجِّل الفشل عند سطر الاختبار
  • عمليات بحث ذاتية الإصلاح: Locator وLocatorHealer يعودان إلى label أو placeholder أو أقرب identifier تشابهًا، ويسجّلان الإصلاح في HealingLog، ويرفضان التخمين بين تطابقين متساويين في الجودة
  • تدقيق إمكانية وصول بخمس قواعد (labels مفقودة، صور بلا label، مناطق لمس أقل من 44 × 44 pt، labels تكرر نوع العنصر، identifiers مكرّرة)، ويمكن دمجه مع performAccessibilityAudit() من Apple
  • مقارنة screenshot وSwiftUI snapshot مع ملفات baseline من نوع PNG، بهامش تفاوت (tolerance) ومناطق مُتجاهَلة وصورة فرق؛ baseline المفقود يُسجَّل والاختبار يفشل
  • junit.xml وملخّص job بصيغة Markdown يُعاد كتابتهما بعد كل اختبار، مع إخفاء الأسرار المسجَّلة وأنماط بيانات الاعتماد (credentials)، إضافة إلى FlakinessAnalyzer لنتائج عدة تشغيلات CI
  • typeSecret يلصق كلمات المرور بدل كتابتها، لذا لا تظهر أبدًا في عناوين activity الخاصة بـ XCTest نفسه؛ CI يبحث في result bundle عن كلمات مرور الاختبار
  • مساعدات اختبار الوحدة: Wait.until، وRetryPolicy، وSpy وThrowingSpy، وFixtures مزروعة، وBenchmark
  • بلا اعتماديات وبلا import لـ Swift Testing، لذا يُمكن ربط الحزمة في UI test bundles؛ 118 اختبار Swift Testing، و9 اختبارات UI في تطبيق المثال AutomationShowcase، وكتالوج DocC بأربع مقالات

البدء السريع

swift
1import XCTest
2import iOSTestingAutomationFramework
3 
4final class CounterRobot: Robot {
5 var label: XCUIElement { app.staticTexts["counter.label"] }
6 var button: XCUIElement { app.buttons["counter.button"] }
7}
8 
9final class CounterUITests: XCTestCase {
10 @MainActor
11 func testTappingCounts() {
12 let app = XCUIApplication()
13 app.launch()
14 
15 let counter = app.on(CounterRobot.self)
16 counter
17 .tap(counter.button)
18 .tap(counter.button)
19 .assertLabel(of: counter.label, equals: "Tapped 2 times")
20 }
21}

التثبيت

Xcode (File › Add Package Dependencies…)

text
1https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.git

Swift Package Manager

swift
1dependencies: [
2 .package(url: "https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.git", from: "2.0.0")
3],
4targets: [
5 .testTarget(name: "YourAppTests", dependencies: [
6 .product(name: "iOSTestingAutomationFramework", package: "iOS-Testing-Automation-Framework")
7 ])
8]

لقطات الشاشة

ثلاث لقطات شاشة هاتف جنبًا إلى جنب: الكتالوج بالأسعار، والكتالوج بأسعار مخفية، وصورة فرق خافتة تُبرِز فيها فقط الأسعار والمفتاح (switch) باللون الأزرق
شاشة الكتالوج لتطبيق المثال على محاكي iPhone: مفتاح Show prices، وزمن تحديث، وأربعة عناصر معدّات تحضير قهوة (brewing gear) بأسعارها

الجدول الزمني

  1. فُتح المستودع كـ framework لأتمتة الاختبار (test automation)؛ معظم الأسبوع التالي ذهب إلى الدوكيومنتيشن

  2. صدر v1.0.0 بقائمة ميزات مستندة إلى README، بعد عمل على README وقالب issue وCI/CD بدأ في 28 يناير؛ استمرت تغييرات README والدوكيومنتيشن حتى 5 فبراير

  3. استُبدلت المصادر بكود placeholder: محرّك visual regression لا يقارن شيئًا، ومدقِّق إمكانية وصول يطبع فقط، وtest target لم يعد يُترجَم (compile)

  4. v2.0.0: أُعيد البناء على Swift 6 بقواعد مُختبَرة خلف كل مساعد UI، وتطبيق مثال باختبارات UI على CI، وDocC، ودمج الأجزاء المفيدة من iOSTestingTools

الروابط

المستودعات المدمجة

مقالة ذات صلة

قراءة المقالة (English)