กรอบการทดสอบ Espresso - ดู Matchers
กรอบเอสเปรสโซให้ผู้จับคู่มุมมองมากมาย จุดประสงค์ของตัวจับคู่คือการจับคู่ข้อมูลพร็อพเพอร์ตี้โดยใช้แอตทริบิวต์ที่แตกต่างกันของมุมมองเช่น Id, Text และความพร้อมใช้งานของมุมมองย่อย ตัวจับคู่แต่ละตัวจะจับคู่คุณลักษณะเฉพาะของมุมมองและใช้กับมุมมองประเภทใดประเภทหนึ่ง ตัวอย่างเช่นwithId matcher จะจับคู่คุณสมบัติIdของมุมมองและใช้กับมุมมองทั้งหมดในขณะที่ withText matcher จะจับคู่คุณสมบัติTextของมุมมองและใช้กับTextViewเท่านั้น
ในบทนี้ให้เราเรียนรู้ที่แตกต่างกัน matchers ที่มีให้โดยกรอบการทดสอบเอสเพรสโซเช่นเดียวกับการเรียนรู้Hamcrestห้องสมุดตามที่ matchers เอสเพรสโซที่ถูกสร้างขึ้น
ห้องสมุด Hamcrest
ห้องสมุดHamcrestเป็นห้องสมุดที่สำคัญในขอบเขตของกรอบการทดสอบเอสเปรสโซ Hamcrestเป็นกรอบสำหรับการเขียนวัตถุที่ตรงกัน เฟรมเวิร์ก Espresso ใช้ไลบรารีHamcrestอย่างกว้างขวางและขยายเมื่อจำเป็นเพื่อจัดหาตัวจับคู่ที่เรียบง่ายและขยายได้
Hamcrestมีฟังก์ชันassertThat ที่เรียบง่ายและชุดของ matchers เพื่อยืนยันวัตถุใด ๆ assertThatมีสามอาร์กิวเมนต์และมีดังที่แสดงด้านล่าง -
สตริง (คำอธิบายของการทดสอบหรือไม่บังคับ)
วัตถุ (จริง)
Matcher (คาดว่า)
ให้เราเขียนตัวอย่างง่ายๆเพื่อทดสอบว่าวัตถุรายการมีค่าที่คาดหวังหรือไม่
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@Test
public void list_hasValue() {
ArrayList<String> list = new ArrayList<String>();
list.add("John");
assertThat("Is list has John?", list, hasItem("John"));
}
ที่นี่hasItemส่งคืนตัวจับคู่ซึ่งตรวจสอบว่ารายการจริงได้ระบุค่าเป็นหนึ่งในรายการหรือไม่
Hamcrestมีตัวจับคู่ในตัวจำนวนมากและยังมีตัวเลือกในการสร้างตัวจับคู่ใหม่ ตัวจับคู่ในตัวที่สำคัญบางตัวที่มีประโยชน์ในกรอบการทดสอบเอสเปรสโซมีดังนี้ -
อะไรก็ได้ - เสมอกัน
ตัวจับคู่ตามตรรกะ
allOf - ยอมรับผู้จับคู่และการแข่งขันจำนวนเท่าใดก็ได้เฉพาะเมื่อผู้จับคู่ทั้งหมดประสบความสำเร็จ
anyOf - ยอมรับจำนวนผู้จับคู่และการแข่งขันหากผู้จับคู่คนใดคนหนึ่งทำสำเร็จ
not - ยอมรับตัวจับคู่หนึ่งคนและจับคู่เฉพาะในกรณีที่ตัวจับคู่ล้มเหลวและในทางกลับกัน
ตัวจับคู่ตามข้อความ
equalToIgnoringCase - ใช้เพื่อทดสอบว่าอินพุตจริงเท่ากับสตริงที่คาดไว้ที่ละเว้นตัวพิมพ์หรือไม่
equalToIgnoringWhiteSpace - ใช้เพื่อทดสอบว่าอินพุตจริงเท่ากับสตริงที่ระบุโดยไม่สนใจกรณีและช่องว่างสีขาว
containsString - ใช้เพื่อทดสอบว่าอินพุตจริงมีสตริงที่ระบุหรือไม่
endsWith - ใช้เพื่อทดสอบว่าอินพุตจริงเริ่มต้นด้วยสตริงที่ระบุหรือไม่
startsWith - ใช้เพื่อทดสอบว่าอินพุตจริงลงท้ายด้วยสตริงที่ระบุหรือไม่
ตัวจับคู่ตามจำนวน
closeTo - ใช้เพื่อทดสอบว่าอินพุตจริงใกล้เคียงกับตัวเลขที่คาดไว้หรือไม่
greaterThan - ใช้เพื่อทดสอบว่าอินพุตจริงมากกว่าตัวเลขที่คาดไว้หรือไม่
greaterThanOrEqualTo - ใช้เพื่อทดสอบว่าอินพุตจริงมากกว่าหรือเท่ากับตัวเลขที่คาดไว้หรือไม่
lessThan - ใช้เพื่อทดสอบว่าอินพุตจริงน้อยกว่าตัวเลขที่คาดไว้หรือไม่
lessThanOrEqualTo - ใช้เพื่อทดสอบว่าอินพุตจริงน้อยกว่าหรือเท่ากับจำนวนที่คาดไว้หรือไม่
ตัวจับคู่ตามวัตถุ
equalTo - ใช้เพื่อทดสอบว่าอินพุตจริงเท่ากับวัตถุที่คาดไว้หรือไม่
hasToString - ใช้เพื่อทดสอบว่าอินพุตจริงมีวิธี toString หรือไม่
instanceOf - ใช้เพื่อทดสอบว่าอินพุตจริงเป็นอินสแตนซ์ของคลาสที่คาดหวังหรือไม่
isCompatibleType - ใช้เพื่อทดสอบว่าอินพุตจริงเข้ากันได้กับประเภทที่คาดไว้หรือไม่
notNullValue - ใช้เพื่อทดสอบว่าอินพุตจริงไม่เป็นโมฆะหรือไม่
sameInstance - ใช้เพื่อทดสอบว่าอินพุตจริงและที่คาดหวังเป็นอินสแตนซ์เดียวกันหรือไม่
hasProperty - ใช้เพื่อทดสอบว่าอินพุตจริงมีคุณสมบัติตามที่คาดหวังหรือไม่
คือ - น้ำตาลหรือทางลัดสำหรับequalTo
คู่หู
Espresso มีวิธี onView () เพื่อจับคู่และค้นหามุมมอง ยอมรับการจับคู่มุมมองและส่งคืนวัตถุ ViewInteraction เพื่อโต้ตอบกับมุมมองที่ตรงกัน รายการตัวจับคู่การดูที่ใช้บ่อยอธิบายไว้ด้านล่าง -
withId ()
withId ()ยอมรับอาร์กิวเมนต์ประเภท int และอาร์กิวเมนต์อ้างถึง id ของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้รหัสของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(withId(R.id.testView))
withText ()
withText ()ยอมรับอาร์กิวเมนต์ของสตริงชนิดและอาร์กิวเมนต์อ้างถึงค่าของคุณสมบัติข้อความของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้ค่าข้อความของมุมมอง ใช้กับTextViewเท่านั้น โค้ดตัวอย่างมีดังนี้
onView(withText("Hello World!"))
withContentDescription ()
withContentDescription ()ยอมรับอาร์กิวเมนต์ของสตริงชนิดและอาร์กิวเมนต์อ้างถึงค่าของคุณสมบัติคำอธิบายเนื้อหาของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้คำอธิบายของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(withContentDescription("blah"))
นอกจากนี้เรายังสามารถส่งรหัสทรัพยากรของค่าข้อความแทนข้อความได้
onView(withContentDescription(R.id.res_id_blah))
hasContentDescription ()
hasContentDescription ()ไม่มีอาร์กิวเมนต์ ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มีคำอธิบายเนื้อหาใด ๆ โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), hasContentDescription()))
withTagKey ()
withTagKey ()ยอมรับอาร์กิวเมนต์ของสตริงชนิดและอาร์กิวเมนต์อ้างถึงคีย์แท็กของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้คีย์แท็ก โค้ดตัวอย่างมีดังนี้
onView(withTagKey("blah"))
นอกจากนี้เรายังสามารถส่งรหัสทรัพยากรของชื่อแท็กแทนชื่อแท็กได้
onView(withTagKey(R.id.res_id_blah))
withTagValue ()
withTagValue ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <Object> และอาร์กิวเมนต์อ้างถึงค่าแท็กของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้ค่าแท็ก โค้ดตัวอย่างมีดังนี้
onView(withTagValue(is((Object) "blah")))
นี่คือเป็น Hamcrest จับคู่
withClassName ()
withClassName ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <String> และอาร์กิวเมนต์อ้างถึงค่าชื่อคลาสของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้ชื่อคลาส โค้ดตัวอย่างมีดังนี้
onView(withClassName(endsWith("EditText")))
ที่นี่endWithคือ Hamcrest matcher และส่งคืน Matcher <String>
ด้วยคำแนะนำ ()
withHint ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <String> และอาร์กิวเมนต์อ้างถึงค่าคำใบ้ของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้คำใบ้ของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(withClassName(endsWith("Enter name")))
withInputType ()
withInputType ()ยอมรับอาร์กิวเมนต์ประเภทintและอาร์กิวเมนต์หมายถึงประเภทอินพุตของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้ประเภทอินพุต โค้ดตัวอย่างมีดังนี้
onView(withInputType(TYPE_CLASS_DATETIME))
ในที่นี้TYPE_CLASS_DATETIMEหมายถึงมุมมองการแก้ไขที่รองรับวันที่และเวลา
withResourceName ()
withResourceName ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <String> และอาร์กิวเมนต์อ้างถึงค่าชื่อคลาสของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้ชื่อทรัพยากรของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(withResourceName(endsWith("res_name")))
ยอมรับสตริงอาร์กิวเมนต์เช่นกัน โค้ดตัวอย่างมีดังนี้
onView(withResourceName("my_res_name"))
withAlpha ()
withAlpha ()ยอมรับอาร์กิวเมนต์ประเภทfloatและอาร์กิวเมนต์อ้างถึงค่าอัลฟาของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้ค่าอัลฟาของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(withAlpha(0.8))
withEffectiveVisibility ()
withEffectiveVisibility ()ยอมรับอาร์กิวเมนต์ประเภทViewMatchersการมองเห็นและอาร์กิวเมนต์หมายถึงการมองเห็นที่มีประสิทธิภาพของมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้การเปิดเผยของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(withEffectiveVisibility(withEffectiveVisibility.INVISIBLE))
กับSpinnerText ()
withSpinnerText ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <String> และอาร์กิวเมนต์อ้างถึงค่าของมุมมองที่เลือกในปัจจุบันของ Spinner ส่งคืนตัวจับคู่ซึ่งตรงกับตัวหมุนตามค่า toString ของรายการที่เลือก โค้ดตัวอย่างมีดังนี้
onView(withSpinnerText(endsWith("USA")))
ยอมรับอาร์กิวเมนต์สตริงหรือรหัสทรัพยากรของสตริงด้วย โค้ดตัวอย่างมีดังนี้
onView(withResourceName("USA"))
onView(withResourceName(R.string.res_usa))
withSubstring ()
withSubString ()คล้ายกับwithText ()ยกเว้นจะช่วยในการทดสอบสตริงย่อยของค่าข้อความของมุมมอง
onView(withSubString("Hello"))
hasLinks ()
hasLinks ()ไม่มีอาร์กิวเมนต์และส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มีลิงก์ ใช้กับ TextView เท่านั้น โค้ดตัวอย่างมีดังนี้
onView(allOf(withSubString("Hello"), hasLinks()))
ที่นี่allOfคือตัวจับคู่ Hamcrest allOfส่งคืนตัวจับคู่ซึ่งตรงกับค่าที่ส่งผ่านทั้งหมดในตัวจับคู่และที่นี่จะใช้เพื่อจับคู่มุมมองรวมทั้งตรวจสอบว่ามุมมองมีลิงก์ในค่าข้อความหรือไม่
hasTextColor ()
hasTextColor ()ยอมรับอาร์กิวเมนต์เดียวประเภท int และอาร์กิวเมนต์อ้างถึงรหัสทรัพยากรของสี จะส่งคืนตัวจับคู่ซึ่งตรงกับTextViewตามสีของมัน ใช้กับTextViewเท่านั้น โค้ดตัวอย่างมีดังนี้
onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))
hasEllipsizedText ()
hasEllipsizedText ()ไม่มีอาร์กิวเมนต์ จะส่งคืนตัวจับคู่ซึ่งตรงกับ TextView ที่มีข้อความยาวและเป็นจุดไข่ปลา (ตัวแรก .. สิบ .. ตัวสุดท้าย) หรือตัดออก (ตัวแรก…) โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_text_view_id), hasEllipsizedText()))
hasMultilineText ()
hasMultilineText ()ไม่มีอาร์กิวเมนต์ ส่งคืนตัวจับคู่ซึ่งตรงกับ TextView ที่มีข้อความหลายบรรทัด โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_test_view_id), hasMultilineText()))
hasBackground ()
hasBackground ()ยอมรับอาร์กิวเมนต์เดียวประเภท int และอาร์กิวเมนต์อ้างถึงรหัสทรัพยากรของทรัพยากรพื้นหลัง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองตามทรัพยากรพื้นหลัง โค้ดตัวอย่างมีดังนี้
onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))
hasErrorText ()
hasErrorText ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <String> และอาร์กิวเมนต์อ้างถึงค่าสตริงข้อผิดพลาดของมุมมอง (EditText) ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้สตริงข้อผิดพลาดของมุมมอง ใช้กับEditTextเท่านั้น โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))
ยอมรับสตริงอาร์กิวเมนต์เช่นกัน โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))
hasImeAction ()
hasImeAction ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <Integer> และอาร์กิวเมนต์หมายถึงวิธีการป้อนข้อมูลที่รองรับมุมมอง (EditText) ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองโดยใช้วิธีการป้อนข้อมูลที่รองรับของมุมมอง ใช้กับEditTextเท่านั้น โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.editText_name),
hasImeAction(is(EditorInfo.IME_ACTION_GO))))
ที่นี่ EditorInfo.IME_ACTION_GO อยู่บนตัวเลือกวิธีการป้อนข้อมูล hasImeAction ()ยอมรับอาร์กิวเมนต์จำนวนเต็มด้วย โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.editText_name),
hasImeAction(EditorInfo.IME_ACTION_GO)))
supportsInputMethods ()
supportsInputMethods ()ไม่มีอาร์กิวเมนต์ จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองหากสนับสนุนวิธีการป้อนข้อมูล โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.editText_name), supportsInputMethods()))
isRoot ()
isRoot ()ไม่มีข้อโต้แย้ง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองรูท โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_root_id), isRoot()))
isDisplayed ()
isDisplayed ()ไม่มีข้อโต้แย้ง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่กำลังแสดงอยู่ โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isDisplayed()))
isDisplayingAtLeast ()
isDisplayingAtLeast ()ยอมรับอาร์กิวเมนต์เดียวของชนิด int จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่แสดงในปัจจุบันอย่างน้อยเปอร์เซ็นต์ที่ระบุ โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))
isCompletelyDisplayed ()
isCompletelyDisplayed ()ไม่มีอาร์กิวเมนต์ จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่แสดงอยู่บนหน้าจออย่างสมบูรณ์ โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))
เปิดใช้งาน()
isEnabled ()ไม่มีอาร์กิวเมนต์ จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่เปิดใช้งาน โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isEnabled()))
isFocusable ()
isFocusable ()ไม่มีข้อโต้แย้ง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มีตัวเลือกโฟกัส โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isFocusable()))
hasFocus ()
hasFocus ()ไม่มีข้อโต้แย้ง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่โฟกัสอยู่ในขณะนี้ โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), hasFocus()))
isClickable ()
isClickable ()ไม่มีข้อโต้แย้ง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่เป็นตัวเลือกคลิก โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isClickable()))
isSelected ()
isSelected ()ไม่มีอาร์กิวเมนต์ จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่เลือกในปัจจุบัน โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isSelected()))
isChecked ()
isChecked ()ไม่มีอาร์กิวเมนต์ ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่เป็นประเภท CompoundButton (หรือประเภทย่อยของมัน) และอยู่ในสถานะที่ถูกตรวจสอบ โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_view_id), isChecked()))
isNotChecked ()
isNotChecked ()อยู่ตรงข้ามกับ isChecked โค้ดตัวอย่างมีดังนี้ * ดังนี้
onView(allOf(withId(R.id.my_view_id), isNotChecked()))
isJavascriptEnabled ()
isJavascriptEnabled ()ไม่มีอาร์กิวเมนต์ จะส่งคืนตัวจับคู่ซึ่งตรงกับ WebView ที่กำลังประเมิน JavaScript โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))
กับผู้ปกครอง ()
withParent ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <View> หนึ่งรายการ อาร์กิวเมนต์หมายถึงมุมมอง ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มุมมองที่ระบุคือมุมมองหลัก โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))
hasSibling ()
hasSibling ()ยอมรับอาร์กิวเมนต์ประเภท Matcher> View < อาร์กิวเมนต์หมายถึงมุมมอง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่ส่งผ่านเข้ามาเป็นหนึ่งในมุมมองพี่น้องของมัน โค้ดตัวอย่างมีดังนี้
onView(hasSibling(withId(R.id.siblingView)))
กับเด็ก ()
withChild ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <View> หนึ่งรายการ อาร์กิวเมนต์หมายถึงมุมมอง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่ส่งผ่านเข้ามาคือมุมมองเด็ก โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))
hasChildCount ()
hasChildCount ()ยอมรับอาร์กิวเมนต์ชนิด int อาร์กิวเมนต์หมายถึงจำนวนลูกของการดู จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มีจำนวนมุมมองเด็กเท่ากันทุกประการตามที่ระบุในอาร์กิวเมนต์ โค้ดตัวอย่างมีดังนี้
onView(hasChildCount(4))
hasMinimumChildCount ()
hasMinimumChildCount ()ยอมรับอาร์กิวเมนต์ชนิด int อาร์กิวเมนต์หมายถึงจำนวนลูกของการดู ส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มีอย่างน้อยจำนวนมุมมองชายด์ตามที่ระบุในอาร์กิวเมนต์ โค้ดตัวอย่างมีดังนี้
onView(hasMinimumChildCount(4))
hasDescendant ()
hasDescendant ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <View> หนึ่งรายการ อาร์กิวเมนต์หมายถึงมุมมอง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่มุมมองที่ส่งผ่านเป็นหนึ่งในมุมมองที่สืบเนื่องมาในลำดับชั้นของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(hasDescendant(withId(R.id.descendantView)))
isDescendantOfA ()
isDescendantOfA ()ยอมรับอาร์กิวเมนต์ประเภท Matcher <View> หนึ่งรายการ อาร์กิวเมนต์หมายถึงมุมมอง จะส่งคืนตัวจับคู่ซึ่งตรงกับมุมมองที่ส่งผ่านเข้ามาเป็นหนึ่งในมุมมองบรรพบุรุษในลำดับชั้นของมุมมอง โค้ดตัวอย่างมีดังนี้
onView(allOf(withId(R.id.myView), isDescendantOfA(withId(R.id.parentView))))