2016-05-11 17 views
10

Próbuję wykonać kilka testów interfejsu użytkownika za pomocą Espresso w aplikacji React Native dla systemu Android, aby używać programu Screengrab firmy Fastlane.Jak używać testu Espresso UI do reakcji na rdzenny?

Śledziłem this tutorial, aby zintegrować React Native w istniejącej aplikacji, aby móc napisać test. Kiedy jednak zacząłem pisać test UI, nie mogłem znaleźć na przykład tego, co napisać i jak celować w komponent i wykonać na nim kliknięcie.

Znalazłem this post, gdzie ktoś daje przykład, jak napisać test Espresso dla React Native, ale to nie działa dla mnie ... Żaden z moich komponentów nie ma ustawionego identyfikatora zasobów, więc nie wiem jak wykonaj pewną akcję w mojej aplikacji.

Jeśli ktoś mógłby mi pomóc napisać test interfejsu użytkownika przy użyciu ekspresu Espresso w aplikacji React Native lub dać mi inne rozwiązanie, by zrobić zautomatyzowany zrzut ekranu mojej aplikacji na Androida, która będzie świetna.

Jeśli masz jakiekolwiek pytania, daj mi znać.

Odpowiedz

9

Espresso

Obecnie nie ma sposobu, aby ustawić na zasobach tożsamości ze reagować-rodzimy, tak, aby skomplikowanych czynności trzeba napisać trochę kodu (jak czekać na elementach), inne rzeczy wydaje się działać całkiem dobrze przez przycisk "test nagrywania espresso" w studio android.

  1. użycie prop accessibilityLabel jako identyfikator elementów (np. "ElementId")
  2. korzystanie onView(allOf(withContentDescription("elementId"), isDisplayed())) dostać elementowi
  3. peform działania tego elementu (jak element.perform(click()))

Tutaj można znaleźć pełny test https://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa

Appium

Jeśli chcesz tylko do wykonywania czynności i przechwytywania zrzutów ekranu, można to zrobić z appium:

  1. użycie prop accessibilityLabel jako identyfikator elementów
  2. w użyciu sterownika internetowej waitForElementByAccessibilityId
  3. robienie zrzutów ekranu z saveScreenshot (” out.png ') -> to stworzy «out.png» plik w katalogu, w którym masz uruchomić testy

W appium wreszcie będzie miał coś podobnego (js przykład):

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

iOS vs Android accessibilityLabels

Wydaje się, że dla Androida jesteś swobodnie korzystać accessibiltyLabel na dowolny element (jak tekst, przeglądaj i tak dalej), ale nie będzie ustawiony iOS dostęp do wszystkich elementów, takich jak Adnroid.

Jeśli ustawisz etykietę na Text nie będzie równa etykieta

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

da oznaczyć równe content na iOS, więc w zasadzie można po prostu ustawić accessible atrybut na węzłach tekstowych na tej platformie

<Text accessible>content</Text> 

To samo dla View - iOS zignoruje etykiety.

Do tej pory niewiele elementów na iOS będzie działać z niestandardowymi etykietami ułatwień dostępu.

Poniżej znajduje się lista elementów, które można używać do testowania aplikacji dla crossplatform reagują-rodzimy testy

Można użyć:

  • TouchableHighlight - będzie działać tak samo na iOS i Androida, można po prostu ustawić accessibilityLabel
  • Text - accessibilityLabel powinna być taka sama jak wewnętrzna testu + trzeba ustawić dostępnym atrybutem

nie będzie działać (na obu platformach łącznie):

  • View

PS: Nie testowałem wszystkie możliwe elementy jeszcze, więc dodać swoje wyniki do innych elementów lub czekać na nasze wyniki

debugowania

Można uzyskać źródło elementu głównego, drukować i czytać ją jako XML dla celów debugowania (for webdriver.io: http://webdriver.io/api/property/getSource.html)

0

Obecnie, jeśli ustawisz testID w warstwie reakcji, która zostanie przetłumaczona na znacznik w systemie Android.

Następnie z espresso można użyć dostarczonego ViewMatcher withTagValue link

Następnie wszystko co musisz zrobić, aby znaleźć się widok jest

onView(withTagValue(is((Object) tagValue))).perform(click()); 
Powiązane problemy