2016-05-11 22 views
10

Tôi đang cố gắng thực hiện một số Kiểm tra giao diện người dùng bằng Espresso trên ứng dụng React Native Android để sử dụng Screengrab của Fastlane.Cách sử dụng Kiểm tra giao diện người dùng Espresso cho React Native?

Tôi đã theo dõi this tutorial để tích hợp React Native vào ứng dụng hiện có để có thể viết thử nghiệm. Nhưng khi tôi bắt đầu viết Test UI, tôi không thể tìm thấy những gì cần viết và cách nhắm mục tiêu một thành phần và thực hiện một cú nhấp chuột vào nó.

Tôi đã tìm thấy this bài đăng nơi ai đó đưa ra ví dụ về cách viết Espresso Test cho React Native nhưng không hiệu quả đối với tôi ... Không có thành phần nào của tôi có id tài nguyên vì vậy tôi không biết cách thực hiện một số hành động trên ứng dụng của tôi.

Nếu ai đó có thể giúp tôi viết Kiểm tra giao diện người dùng bằng Espresso trên ứng dụng React Native hoặc cung cấp cho tôi một giải pháp khác để chụp ảnh màn hình tự động của ứng dụng Android của tôi.

Nếu bạn có bất kỳ câu hỏi nào, hãy cho tôi biết.

Trả lời

9

Espresso

Hiện nay không có cách nào để thiết lập tài nguyên-id với phản ứng bản địa, vì vậy, để thực hiện các hành động phức tạp bạn cần phải viết một số mã (như chờ đợi cho các yếu tố), những thứ khác dường như làm việc khá tốt qua nút 'espresso thử nghiệm thu âm' của studio android.

  1. sử dụng chống đỡ accessibilityLabel như id cho các yếu tố (ví dụ. "ElementId")
  2. sử dụng onView(allOf(withContentDescription("elementId"), isDisplayed())) để có được yếu tố
  3. peform hành động trên yếu tố đó (như element.perform(click()))

Ở đây bạn có thể tìm thấy kiểm tra đầy đủ https://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa

Appium

.210

Nếu bạn chỉ muốn thực hiện hành động và chụp ảnh chụp màn hình, bạn có thể làm điều này với appium:

  1. sử dụng chống đỡ accessibilityLabel như id cho các yếu tố
  2. sử dụng điều khiển web waitForElementByAccessibilityId
  3. ảnh chụp màn hình chụp với saveScreenshot (' out.png ') -> điều này sẽ tạo ra 'out.png tập tin trong thư mục mà bạn đã chạy thử nghiệm

trong appium bạn cuối cùng sẽ có một cái gì đó tương tự (js chẳng hạn)':

driver.waitForElementByAccessibilityId('searchInputAcc', 5000) 
     .type('bold\n') 
     .sleep(5000) 
     .saveScreenshot('out.png') 

iOS vs Android accessibilityLabels

Dường như dành cho Android bạn đang miễn phí để sử dụng accessibiltyLabel trên bất kỳ yếu tố (như Text, Xem và vân vân), nhưng iOS sẽ không được thiết lập khả năng tiếp cận trên tất cả các yếu tố như Adnroid.

Nếu bạn đặt nhãn trên Text nó sẽ không bằng nhãn của bạn

<Text accessibilityLabel="my_text">content</Text> 

sẽ cung cấp cho bạn dán nhãn bằng content trên iOS, vì vậy về cơ bản bạn chỉ có thể thiết lập thuộc tính accessible trên các nút văn bản của bạn cho nền tảng này

<Text accessible>content</Text> 

Điều tương tự cho View - iOS sẽ bỏ qua nhãn của bạn.

Cho đến nay, không có nhiều yếu tố trên iOS sẽ hoạt động với các nhãn trợ năng tùy chỉnh của bạn.

Dưới đây là danh sách các yếu tố mà bạn có thể sử dụng để thử nghiệm ứng dụng cho crossplatform kiểm tra phản ứng bản địa

Bạn có thể sử dụng:

  • TouchableHighlight - sẽ làm việc cùng trên iOS và Android, bạn có thể chỉ thiết accessibilityLabel
  • Text - accessibilityLabel nên giống như kiểm tra bên trong + bạn phải thiết lập thuộc tính truy cập

sẽ không hoạt động (đối với cả hai nền tảng hoàn toàn):

  • View

T.B. chúng tôi đã không kiểm tra tất cả các yếu tố có thể được nêu ra, vì vậy thêm kết quả của bạn cho các yếu tố khác hoặc chờ đợi kết quả của chúng tôi

Debugging

Bạn có thể nhận nguồn gốc của phần tử gốc, in và đọc nó như xml cho mục đích gỡ lỗi (cho webdriver.io: http://webdriver.io/api/property/getSource.html)

5

Tôi có PR chống lại phản ứng gốc để thêm hỗ trợ thích hợp cho resource-id. Hãy khám phá và bỏ phiếu, vui lòng: https://github.com/facebook/react-native/pull/9942

Sau khi được hợp nhất trong testID sẽ thêm resource-id miễn là Id được xác định trong res/values/ids.xml.

0

Hiện tại nếu bạn đặt testID trong lớp phản hồi sẽ được dịch sang thẻ trong android.

Sau đó, với Espresso bạn có thể sử dụng được cung cấp ViewMatcher withTagValue link

Sau đó, tất cả các bạn phải làm gì để tìm thấy một cái nhìn là

onView(withTagValue(is((Object) tagValue))).perform(click()); 
Các vấn đề liên quan