هناك ثلاث طرق رئيسية للتفاعل مع عناصر واجهة المستخدم:
- تتيح لك الباحثون تحديد عنصر واحد أو عدة عناصر (أو عُقد في شجرة الدلالة) لتقديم تأكيدات أو تنفيذ إجراءات عليها.
- تُستخدم التأكيدات للتحقق من وجود العناصر أو لاحتواء ذات الصلة.
- تحاكي الإجراءات أحداث المستخدمين في العناصر، مثل النقرات أو إيماءات أخرى.
تقبل بعض واجهات برمجة التطبيقات هذه SemanticsMatcher
للإشارة إلى واحد أو أكثر.
عُقد في شجرة الدلالة.
الباحثون
يمكنك استخدام onNode
وonAllNodes
لاختيار عُقدة واحدة أو أكثر.
على التوالي، ولكن يمكنك أيضًا الاستعانة بأدوات العثور على الخيارات الأكثر شيوعًا
عمليات البحث، مثل onNodeWithText
،
onNodeWithContentDescription
. يمكنك تصفح القائمة الكاملة في
ورقة الملاحظات الموجزة عن إنشاء اختبار:
اختيار عقدة واحدة
composeTestRule.onNode(<<SemanticsMatcher>>, useUnmergedTree = false): SemanticsNodeInteraction
// Example
composeTestRule
.onNode(hasText("Button")) // Equivalent to onNodeWithText("Button")
تحديد عُقد متعددة
composeTestRule
.onAllNodes(<<SemanticsMatcher>>): SemanticsNodeInteractionCollection
// Example
composeTestRule
.onAllNodes(hasText("Button")) // Equivalent to onAllNodesWithText("Button")
شجرة تم إلغاء دمجها
تدمج بعض العُقد المعلومات الدلالية الخاصة بالعناصر الثانوية. على سبيل المثال، الذي يحتوي على عنصرين نصيين يدمج تصنيفات العناصر النصية:
MyButton {
Text("Hello")
Text("World")
}
من خلال إجراء اختبار، استخدِم printToLog()
لعرض شجرة الدلالة على النحو التالي:
composeTestRule.onRoot().printToLog("TAG")
يطبع هذا الرمز الإخراج التالي:
Node #1 at (...)px
|-Node #2 at (...)px
Role = 'Button'
Text = '[Hello, World]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
إذا كنت تحتاج إلى مطابقة عقدة لما يمثل شجرة غير مدمجة، يمكنك تعيين
من useUnmergedTree
إلى true
:
composeTestRule.onRoot(useUnmergedTree = true).printToLog("TAG")
يطبع هذا الرمز الإخراج التالي:
Node #1 at (...)px
|-Node #2 at (...)px
OnClick = '...'
MergeDescendants = 'true'
|-Node #3 at (...)px
| Text = '[Hello]'
|-Node #5 at (83.0, 86.0, 191.0, 135.0)px
Text = '[World]'
تتوفر المعلمة useUnmergedTree
في جميع أدوات العثور. على سبيل المثال، هنا
التي يتم استخدامها في أداة البحث عن "onNodeWithText
".
composeTestRule
.onNodeWithText("World", useUnmergedTree = true).assertIsDisplayed()
التأكيدات
يُرجى التحقّق من التأكيدات من خلال الاتصال بـ assert()
على SemanticsNodeInteraction
.
التي يعرضها أداة البحث باستخدام مطابقة واحدة أو أكثر:
// Single matcher:
composeTestRule
.onNode(matcher)
.assert(hasText("Button")) // hasText is a SemanticsMatcher
// Multiple matchers can use and / or
composeTestRule
.onNode(matcher).assert(hasText("Button") or hasText("Button2"))
ويمكنك أيضًا استخدام وظائف الملاءمة لأكثر التأكيدات شيوعًا، مثل
assertExists
وassertIsDisplayed
وassertTextEquals
.
يمكنك تصفُّح القائمة الكاملة في ورقة الملاحظات الموجزة عن إنشاء اختبار.
هناك أيضًا دوال للتحقق من التأكيدات على مجموعة من العُقد:
// Check number of matched nodes
composeTestRule
.onAllNodesWithContentDescription("Beatle").assertCountEquals(4)
// At least one matches
composeTestRule
.onAllNodesWithContentDescription("Beatle").assertAny(hasTestTag("Drummer"))
// All of them match
composeTestRule
.onAllNodesWithContentDescription("Beatle").assertAll(hasClickAction())
المهام
لإدخال إجراء في عقدة، يمكنك استدعاء دالة perform…()
:
composeTestRule.onNode(...).performClick()
فيما يلي بعض الأمثلة على الإجراءات:
performClick(),
performSemanticsAction(key),
performKeyPress(keyEvent),
performGesture { swipeLeft() }
يمكنك تصفح القائمة الكاملة في ورقة الملاحظات الموجزة عن إنشاء اختبار:
المطابقون
تتوفر مجموعة متنوعة من المطابقات لاختبار Compose الرمز.
المطابقات الهرمية
تتيح لك المطابقات الهرمية الانتقال إلى أعلى أو أسفل شجرة الدلالة وتنفيذ بشكل مطابق.
fun hasParent(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnySibling(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyAncestor(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyDescendant(matcher: SemanticsMatcher): SemanticsMatcher
في ما يلي بعض الأمثلة على عمليات المطابقة هذه قيد الاستخدام:
composeTestRule.onNode(hasParent(hasText("Button")))
.assertIsDisplayed()
أدوات الاختيار
يمكنك بدلاً من ذلك استخدام أدوات الاختيار التي تتيح إنشاء بعض اختبارات أكثر قابلية للقراءة.
composeTestRule.onNode(hasTestTag("Players"))
.onChildren()
.filter(hasClickAction())
.assertCountEquals(4)
.onFirst()
.assert(hasText("John"))
يمكنك تصفُّح القائمة الكاملة في ورقة الملاحظات الموجزة عن إنشاء اختبار.
مراجع إضافية
- اختبار التطبيقات على Android: اختبار Android الرئيسي الصفحة المقصودة نظرة أوسع نطاقًا لأساسيات الاختبار والتقنيات.
- أساسيات الاختبار: مزيد من المعلومات حول المفاهيم الأساسية لاختبار تطبيق Android.
- الاختبارات المحلية: يمكنك إجراء بعض الاختبارات. محليًا على محطة العمل الخاصة بك.
- الاختبارات الآلية: مناسبة التدرب على إجراء الاختبارات المعملية أيضًا. وهذا يعني أن الاختبارات التي يتم إجراؤها مباشرة على الجهاز فقط.
- الدمج المستمر: يتيح لك الدمج المستمر دمج اختباراتك في عملية النشر. المشروع.
- اختبار أحجام الشاشات المختلفة: باستخدام بعض الأجهزة العديدة المتاحة للمستخدمين، فينبغي عليك اختبارها لشاشات مختلفة مختلفة.
- Espresso: مخصّصة للاستخدام المستند إلى العرض يمكن أن تكون واجهات المستخدم والمعرفة بالإسبريسو مفيدة في بعض جوانب Compose اختبار الفرضية.