2016-02-27 73 views
3

我有一個PinCodeView,延伸LinearLayout。我在我的init()方法中有以下代碼。 DigitEditText延伸EditText,只接受一個數字。此視圖將用於接收長度爲4位的確認碼。如何在Android中通過Espresso捕捉帶有標記的視圖?

private void init() 
{ 
    ... 

    for (int i = 0; i < 4; i++) 
    { 
     DigitEditText digitView = getDigitInput(); 
     digitView.setTag(R.id.etPinCodeView, i); // uses for Espresso testing 
     digitView.setKeyEventCallback(this); 
     ... 
} 

我創建res/values/ids.xml這就是它的內容:現在

<resources> 
    <item name="etPinCodeView" type="id"/> 
</resources> 

,在咖啡我要捕捉到每一個DigitEditText,把一個數字在它。我如何能夠做到這一點?我看到有兩種方法,withTagKey()withTagValue(),但我不知道如何讓它們工作。

我以爲這樣的東西可能會起作用,但似乎我無法將0分配到withTagValue()

onView(allOf(withTagKey(R.id.etPinCodeView), withTagValue(matches(0)))).perform(typeText("2")); 

任何想法將不勝感激。謝謝。

回答

1

我用這個技巧解決了我的問題。希望它能爲你節省一些時間。

首先我使用Id而不是tag

for (int i = 0; i < 4; i++) 
    { 
     DigitEditText digitView = getDigitInput(); 
     digitView.setId(R.id.etPinCodeView + i); // uses for Espresso testing 
     digitView.setKeyEventCallback(this); 
     ... 

這是因爲它的測試:

onView(withId(R.id.etPinCodeView + 0)).perform(typeText("2")); 
onView(withId(R.id.etPinCodeView + 1)).perform(typeText("0")); 
onView(withId(R.id.etPinCodeView + 2)).perform(typeText("1")); 
onView(withId(R.id.etPinCodeView + 3)).perform(typeText("6")); 
+0

非常有幫助,謝謝! – WenChao

6

由於withTagValue需要的org.hamcrest.Matcher實例作爲參數,我們可以創建一個使用Matcher.is方法 找到與某個標籤視圖一個簡單的在您的expresso測試中:

String tagValue = "lorem impsum"; 
ViewInteraction viewWithTagVI = onView(withTagValue(is((Object) tagValue))); 
+0

哪裏有'是'可用,我無法找到它 –

+1

@LavekushAgrawal,感謝您的評論。我通過鏈接和更好的解釋來改進我的答案。 – petey