UI উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করার তিনটি প্রধান উপায় রয়েছে:
- ফাইন্ডাররা আপনাকে এক বা একাধিক উপাদান নির্বাচন করতে দেয় (অথবা শব্দার্থবিদ্যা গাছের নোডগুলি ) দাবী করতে বা তাদের উপর ক্রিয়া সম্পাদন করতে।
- উপাদানগুলি বিদ্যমান বা নির্দিষ্ট বৈশিষ্ট্য রয়েছে তা যাচাই করতে দাবী ব্যবহার করা হয়।
- ক্রিয়াগুলি উপাদানগুলিতে সিমুলেটেড ব্যবহারকারীর ইভেন্টগুলিকে ইনজেক্ট করে, যেমন ক্লিক বা অন্যান্য অঙ্গভঙ্গি৷
এই APIগুলির মধ্যে কিছু শব্দার্থবিদ্যা গাছের এক বা একাধিক নোড উল্লেখ করতে একটি 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()
দাবী
এক বা একাধিক ম্যাচারের সাথে একজন ফাইন্ডার দ্বারা ফিরে আসা SemanticsNodeInteraction
এ assert()
কল করে দাবী পরীক্ষা করুন:
// 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() }
আপনি কম্পোজ টেস্টিং চিট শীটে সম্পূর্ণ তালিকা ব্রাউজ করতে পারেন।
ম্যাচার্স
আপনার রচনা কোড পরীক্ষা করার জন্য বিভিন্ন ম্যাচার উপলব্ধ।
অনুক্রমিক ম্যাচার্স
অনুক্রমিক ম্যাচার আপনাকে শব্দার্থবিদ্যা গাছের উপরে বা নিচে যেতে দেয় এবং ম্যাচিং করতে দেয়।
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 অ্যাপ পরীক্ষা করার পিছনে মূল ধারণাগুলি সম্পর্কে আরও জানুন।
- স্থানীয় পরীক্ষা : আপনি আপনার নিজস্ব ওয়ার্কস্টেশনে স্থানীয়ভাবে কিছু পরীক্ষা চালাতে পারেন।
- ইন্সট্রুমেন্টেড পরীক্ষা : যন্ত্রযুক্ত পরীক্ষা চালানোও ভালো অভ্যাস। অর্থাৎ, যে পরীক্ষাগুলি সরাসরি ডিভাইসে চলে।
- ক্রমাগত ইন্টিগ্রেশন : ক্রমাগত ইন্টিগ্রেশন আপনাকে আপনার পরীক্ষাগুলিকে আপনার স্থাপনার পাইপলাইনে একত্রিত করতে দেয়।
- বিভিন্ন স্ক্রীনের মাপ পরীক্ষা করুন : ব্যবহারকারীদের জন্য উপলব্ধ কিছু অনেক ডিভাইসের সাথে, আপনার বিভিন্ন স্ক্রীন মাপের জন্য পরীক্ষা করা উচিত।
- এসপ্রেসো : ভিউ-ভিত্তিক UI-এর উদ্দেশ্যে, Espresso জ্ঞান এখনও রচনা পরীক্ষার কিছু দিকগুলির জন্য সহায়ক হতে পারে।