RecyclerViewActions.scrollTo()
đối sánh với số ItemView
của số ViewHolder
, được tăng thêm trong số onCreateViewHolder()
của bộ điều hợp. Và để scrollTo()
hoạt động, bạn cần phải cung cấp đối sánh xác định duy nhất rằng ItemView
.
Trình kết hợp hiện tại của bạn cho espresso cuộn đến ViewHolder đã được tăng thêm với TextView
làm itemView
. Điều này có thể xảy ra, nhưng thường bạn có một số hành động ViewGroup
đang diễn ra ở đó để tạo kiểu cho người xem theo cách bạn muốn họ xem.
Nếu bạn thay đổi scrollTo()
Matcher, thành hasDescendant(withText("Text XYZ"))
để tính tất cả bố cục lồng nhau (nếu có nhiều bố cục).
Cũng nên nhớ kể từ khi bạn cũng đang cố gắng để nhấp vào mục - bạn không thể làm điều đó trong cùng perform()
bởi vì nó sẽ gửi các nhấp chuột vào dòng ViewInteraction
, đó là trong trường hợp này một RecyclerView
với id R.id.recycler_view
. Làm như vậy trong cùng một thao tác chỉ cần nhấp vào giữa trên RecyclerView
, không phải là mục bạn đã cuộn đến.
Để giải quyết vấn đề này, bạn cần phải cần một số onView()
khác với trình ghép mà bạn đã sử dụng để cuộn đến một mục hoặc sử dụng RecyclerView.actionOnItem()
.
Trong trường hợp câu lệnh onView()
khác, hasDescendant(withText("Text XYZ"))
sẽ không thành công, vì nó sẽ tìm tất cả cha mẹ của TextView đó (xem, recyclerview, viewgroup chứa recyclerview và vv) vì tất cả đều có hậu duệ cụ thể này. Điều này sẽ buộc bạn phải làm cho đối sánh ItemView
chính xác hơn và chiếm tất cả bố cục lồng nhau. Thông thường của tôi đi đến matcher là withChild()
trong những tình huống này, nhưng nó có thể khác nhau cho bạn.
Nguồn
2016-09-04 00:36:35
dường như không hoạt động - nhật ký lỗi, vui lòng – piotrek1543
bạn đang kiểm tra chế độ xem đó được hiển thị trước khi cuộn đến đó. – denys
@denys ckeck là cho recyclerview thực tế. Nó không nên thực hiện bất kỳ sự khác biệt trừ khi recyclerview không thực sự được hiển thị. –