2016-01-19 49 views
1

我試圖點擊網格視圖中特定位置的物品。意式濃縮咖啡,點擊位置處的物品

onData(instanceOf(MyClass.class)) 
      .inAdapterView(withId(R.id.my_view)) 
      .atPosition(R.integer.my_id) 
      .perform(click()); 

,但我得到這個java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

我使用MockWebServer排隊的響應,即使在UI出現在屏幕上的所有列表項,我得到這個錯誤,我不知道爲什麼。

另外,我想獲取特定項目的內容。

+0

你能提供完整的堆棧跟蹤嗎? – AndroidGuy

回答

1

嗯,我認爲這是因爲你匹配的類只有一個,而不是具有值的特定適配器。

請考慮這個帖子:

作爲參數傳遞的匹配,以onData()必須由Adapter.getItem()返回的值作爲 匹配。所以第一個版本不匹配, ,因爲使用了錯誤的類型。它應該是:

onData(is(instanceOf(IconRowAdapter.IconRow.class))) 

什麼也可以是一個缺陷是對不同類型的 CharSequences使用equalTo。字符串是一個CharSequence,但是如果IconRow.getText()返回CharSequence而不是String,那麼這也可以是 Spannable,Editable等,在這種情況下equalTo不匹配。因此,如果 IconRow.getText()只返回字符串,請務必在比較之前將其 轉換爲字符串。

這個職位是從How to use Espresso to test item in adapter at a specific position

你的問題缺少的測試類的代碼服用,所以我不能給你直接的答案。我只能推薦閱讀上面的StackOverflow鏈接。

希望它能幫助

+0

嘿,我也試過,但我得到的錯誤是不同的,無論我使用「onData」我得到indexOutOfBoundsException –

+0

你有沒有注意到你是嘲笑類,但作爲參數的Espresso有正常的;-),所以你的適配器可能是空的 – piotrek1543

+0

嘲笑類? (withId(R.id.my_view)) .atPosition(R.integer.my_id) .perform(click());'這是什麼?我試過了,我仍然遇到同樣的錯誤。 –

0

您可能需要更深一點「深入」到視圖層次去小區的項目。在「.perform」使用項目的ID在網格單元

onChildView(withId(R.id.???)).perform(click()); 

使用視圖,用戶會點擊的ID前將額外的方法調用。

+0

嘿,問題是,我沒有重寫我的適配器中的'getItem'調用 –