2016-09-12 14 views
9

Tôi có văn bản sau đây trong tập tin nguồn strings.xml:Android Espresso - khẳng định văn bản trên màn hình chống lại chuỗi trong nguồn

<string name="txt_to_assert">My Text</string> 

Thông thường trong một mã ứng dụng, sử dụng văn bản này và hiển thị nó trên màn hình, tôi đang thực hiện các việc sau:

getString(R.string.main_ent_mil_new_mileage); 

Hiện tại, tôi đang cố gắng sử dụng tài nguyên chuỗi này trong bài kiểm tra UI được viết bằng Espresso. Tôi đang nghĩ đến việc làm điều gì đó tương tự:

String myTextFromResources = getString(R.string.main_ent_mil_new_mileage); 
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources)) 
    .check(matches(isDisplayed())); 

Tuy nhiên, không thể sử dụng phương pháp getString(...) tại đây.
Có cách nào để lấy văn bản từ tệp tài nguyên strings.xml và sử dụng nó trong một bài kiểm tra được viết bằng Espresso không?

+0

tôi nhận được một lỗi: ** Tài $ NotFoundException: ID tài nguyên Chuỗi ** –

Trả lời

29

Sử dụng chức năng này:

private String getResourceString(int id) { 
    Context targetContext = InstrumentationRegistry.getTargetContext(); 
    return targetContext.getResources().getString(id); 
} 

Bạn chỉ cần gọi nó với id của chuỗi và thực hiện các hành động của bạn:

String myTextFromResources = getResourceString(R.string.main_ent_mil_new_mileage); 
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources)) 
    .check(matches(isDisplayed())); 

* EDIT cho phiên bản Espresso mới:

Với phiên bản mới của Espresso, bạn sẽ có thể gọi trực tiếp tài nguyên chuỗi bằng ViewMatcher. Vì vậy, đầu tiên, tôi khuyên bạn nên thử trực tiếp nhập khẩu này

import static android.support.test.espresso.matcher.ViewMatchers.withText; 

Và sau đó trong các mã:

withText(R.string.my_string_resource) 
+0

Rất vui được đọc mà ! bạn có thể chấp nhận câu trả lời của tôi hoặc bầu cho tôi một người bạn đời;) – adalPaRi

+1

Đã bỏ phiếu, nhưng tôi nhận được tin nhắn mà người dùng có ít hơn 15 danh tiếng được xem xét, nhưng không được hiển thị công khai. – klimos

+0

Phương pháp đầu tiên của bạn vẫn hợp lệ nếu chúng tôi muốn sử dụng equalToIgnoringCase từ hamcrest. Ví dụ: onView (allOf (withText (equalToIgnoringCase (getResourceString (R.string.promos_activity_tab_store_))), isCompletelyDisplayed())) thực hiện (nhấp()); – Kunami

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