الاختبار للتأكّد من التغييرات في إعدادات الشاشة باستخدام Espresso Device API

يمكنك استخدام Espresso Device API لاختبار تطبيقك عندما يخضع الجهاز لتغييرات شائعة في الإعدادات، مثل التدوير وفتح الشاشة. تتيح لك واجهة Espresso Device API محاكاة تغييرات الإعدادات هذه على جهاز افتراضي وتنفيذ اختباراتك بشكل متزامن، وبالتالي لا يتم تنفيذ أكثر من إجراء أو تأكيد واحد لواجهة المستخدم في الوقت نفسه وتكون نتائج الاختبار أكثر موثوقية. إذا كنت مبتدئًا في كتابة اختبارات واجهة المستخدم باستخدام Espresso، راجِع المستندات الخاصة بها.

لاستخدام Espresso Device API، ستحتاج إلى ما يلي:

  • Android Studio Iguana أو إصدار أحدث
  • الإصدار 8.3 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث
  • الإصدار 33.1.10 أو إصدار أحدث من Android Emulator
  • جهاز Android افتراضي يعمل بالمستوى 24 أو أعلى من واجهة برمجة التطبيقات

إعداد مشروعك لواجهة Espresso Device API

لإعداد مشروعك بحيث يتوافق مع Espresso Device API، اتّبِع الخطوات التالية:

  1. للسماح بوصول أوامر الاختبار إلى الجهاز الاختباري، أضِف الإذنَين INTERNET وACCESS_NETWORK_STATE إلى ملف البيان في مجموعة المصدر androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. فعِّل العلامة التجريبية enableEmulatorControl في ملف gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. فعِّل الخيار emulatorControl في النص البرمجي للإصدار على مستوى الوحدة:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    رائع

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. في النص البرمجي للإصدار على مستوى الوحدة، استورِد مكتبة Espresso Device إلى مشروعك:

    Kotlin

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:3.5.1")
      }
      

    رائع

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:3.5.1'
      }
      

الاختبار مقابل تغييرات الإعدادات الشائعة

تتضمّن واجهة برمجة التطبيقات Espresso Device API عدة اتجاهات في الشاشة وحالات قابلة للطي يمكنك استخدامها لمحاكاة التغييرات في إعدادات الجهاز.

الاختبار مقابل تدوير الشاشة

في ما يلي مثال على كيفية اختبار ما يحدث لتطبيقك عند تدوير شاشة الجهاز:

  1. أولاً، للحصول على حالة بدء متسقة، اضبط الجهاز على الوضع العمودي:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. أنشئ اختبارًا يضبط الجهاز على الاتجاه الأفقي أثناء تنفيذ الاختبار:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. بعد تدوير الشاشة، تحقق من أن واجهة المستخدم تتكيف مع التنسيق الجديد كما هو متوقع.

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

الاختبار مقابل فتح الشاشة

إليك مثال على كيفية اختبار ما يحدث لتطبيقك إذا كان على جهاز قابل للطي وكانت الشاشة غير قابلة للطي:

  1. أولاً، اختبِر الجهاز في الحالة المطوية من خلال الاتصال على onDevice().setClosedMode(). عليك التأكّد من أنّ تصميم تطبيقك يتناسب مع عرض الشاشة المكثّف.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. للانتقال إلى الحالة "غير مطوية بالكامل"، يُرجى اتّصال onDevice().setFlatMode(). تحقّق من أنّ تصميم التطبيق يتكيّف مع فئة الحجم الموسّع.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

تحديد الأجهزة التي تحتاج إليها اختباراتك

وإذا كنت تجري اختبارًا يؤدي إلى تنفيذ إجراءات قابلة للطي على جهاز غير قابل للطي، من المرجح أن يتعذّر الاختبار. لتنفيذ الاختبارات ذات الصلة بالجهاز قيد التشغيل فقط، استخدِم التعليق التوضيحي @RequiresDeviceMode. يتخطّى مسؤول الاختبار تلقائيًا إجراء الاختبارات على الأجهزة التي لا تتوافق مع الإعدادات التي يتم اختبارها. يمكنك إضافة قاعدة متطلبات الجهاز إلى كل اختبار أو لفئة اختبار بأكملها.

على سبيل المثال، لتحديد عدم تنفيذ الاختبار إلا على الأجهزة التي تتيح فتح الجهاز بإعدادات مسطحّة، أضِف رمز @RequiresDeviceMode التالي إلى الاختبار:

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}