6

Tôi có ba hoạt động trong ứng dụng của tôiAndroid Espresso kiểm tra chức năng với mảnh

  1. Một hoạt động đăng nhập
  2. Một hoạt động chính
  3. Một hoạt động chi tiết

Tôi muốn sử dụng cà phê để kiểm tra một chuỗi sự kiện: nhấp vào nút đăng nhập trên hoạt động đăng nhập, mở hoạt động chính, sau đó nhấp vào mục danh sách trong hoạt động chính, mở hoạt động chi tiết, sau đó nhấp vào nút khác trong hoạt động chi tiết. Tôi bắt đầu bằng cách tạo thử nghiệm đơn giản này, để có được một tài liệu tham khảo để listview:

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> { 

    public LoginActivityTest() { 
     super(LoginActivity.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 

     getActivity(); 
    } 

    public void testSequence() throws Exception { 
     // Login 
     onView(withId(R.id.button_log_in)).perform(click()); 

     // Check if MainActivity is loaded 
     onView(withId(R.id.container)).check(matches(isDisplayed())); 

     // Check if Fragment is loaded 
     onView(withId(R.id.list)).check(matches(isDisplayed())); 
    } 
} 

Trên MainActivityonCreate() phương pháp tôi tải một đoạn như thế này:

getFragmentManager().beginTransaction() 
       .add(R.id.container, mListFragment) 
       .commit(); 

Các ListFragment đoạn có một danh sách (R.id.list), nhưng thử nghiệm vẫn không thành công với một số NoMatchingViewException:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.tests.android.development:id/list 

Tôi đang làm gì sai?

+0

Bạn đã tìm thấy giải pháp cho điều này chưa? – AdamMc331

+0

Nếu bạn vẫn đang tìm kiếm trợ giúp về điều này, vui lòng hiển thị mã đầy đủ của 'onCreate()' có liên quan đến câu hỏi này. Đặc biệt, hiển thị khai báo và intialization cho 'mListFragment'. Cũng hiển thị bố cục XML cho 'ListFragment'. –

Trả lời

1

Một lưu ý từ documentation cho onView:

Lưu ý: xem có phải là một phần của hệ thống phân cấp xem. Đây có thể không phải là trường hợp nếu nó được hiển thị như một phần của AdapterView (ví dụ: ListView). Nếu đúng như vậy, hãy sử dụng Espresso.onData để tải chế độ xem trước.

Để sử dụng onData để tải chế độ xem, bạn cần kiểm tra các trường hợp của bộ điều hợp của bạn có trong ListView hay không. Nói cách khác, nếu listview của bạn sử dụng một bộ chuyển đổi con trỏ, bạn có thể thử này:

onData(allOf(is(instanceOf(Cursor.class)))).check(matches(isDisplayed())); 

Điều quan trọng cần lưu ý ở trên sẽ chỉ vượt qua nếu listview của bạn có chứa ít nhất một mục. Bạn nên có một bài kiểm tra khi một mục tồn tại và một bài kiểm tra ở đó một mục không có.

Để biết thêm thông tin về cách kiểm tra dữ liệu tồn tại, hãy xem here.

Để biết thêm thông tin về cách kiểm tra dữ liệu không tồn tại trong bộ điều hợp, hãy xem here.

+0

Không có số lượng dữ liệu phù hợp sẽ đưa Danh sách vào hệ thống phân cấp mà lỗi đó xảy ra. Hướng dẫn của bạn có giá trị, nhưng chỉ ** sau ** lỗi được giải quyết, mà bạn không cung cấp thông tin. – TWiStErRob

+0

Mẹo: 'onData (instanceOf (Cursor.class))' sẽ đạt được cùng một truy vấn dữ liệu. 'allOf' không có ý nghĩa đối với một đối sánh đơn lẻ và' is' là thừa theo định nghĩa. Tuy nhiên, 'is' có thể có ý nghĩa, nếu nó làm cho mã đọc thêm tiếng Anh: ở đây nó không, vì' allOf'. – TWiStErRob

0

Trong phiên bản hiện tại (Espresso 2.2.2) ngoại lệ này luôn được nối với mệnh đề View Hierarchy: liệt kê tất cả các chế độ xem có sẵn để khớp. Tản bộ qua đó và kiểm tra xem bạn có thể tìm thấy danh sách của mình hay không.

Cách khác: xem android-sdk\tools\uiautomatorviewer.bat (hoặc .sh) để chụp nhanh màn hình và phân cấp hiện tại. Đặt điểm ngắt trên danh sách phù hợp với dòng của bạn và kiểm tra với người xem nếu danh sách ở đó. Nếu bạn tìm thấy danh sách, có thể có vấn đề về thời gian trong thử nghiệm. Có thể nó không đợi đủ, hãy xem thêm về IdlingResource s.

Các vấn đề liên quan