2016-05-11 10 views
10

Я пытаюсь сделать некоторые тесты пользовательского интерфейса с помощью эспрессо в своем приложении Android React для использования Screengrab by Fastlane.Как использовать тестовое тестирование Espresso для React Native?

Я следовал this tutorial, чтобы интегрировать React Native в существующее приложение, чтобы иметь возможность написать тест. Но когда я начал писать свой тест пользовательского интерфейса, я не смог найти, что писать и как настроить таргетинг на компонент и выполнить клик по нему, например.

Я нашел this сообщение, где кто-то дает пример о том, как написать тест Espresso для React Native, но он не работает для меня ... Ни один из моих компонентов не имеет идентификатор ресурса, поэтому я не знаю, как выполните некоторые действия в моем приложении.

Если кто-то может помочь мне написать UI Test с помощью Espresso в приложении React Native или дать мне еще одно решение для автоматического снимка экрана моего приложения для Android, которое будет потрясающе.

Если у вас есть какие-либо вопросы, дайте мне знать.

ответ

9

Эспрессо

В настоящее время нет никакого способа установить ресурс-идентификатор с реагировать родной, так, чтобы сложные действия, которые вы должны написать код (например, ждать элементов), другие вещи, кажется, работает достаточно хорошо, с помощью android studio 'запись эспрессо тест'.

  1. использование проп accessibilityLabel в качестве идентификатора для элементов (например. "ElementId")
  2. использовать onView(allOf(withContentDescription("elementId"), isDisplayed())), чтобы получить элемент
  3. peform действия для этого элемента (например element.perform(click()))

Здесь вы можете найти полный тест https://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa

Аппиум

Если вы просто хотите, чтобы выполнять действия и снимки экрана, вы можете сделать это с appium:

  1. использование проп accessibilityLabel в качестве идентификатора для элементов
  2. в использовании веб-драйвера waitForElementByAccessibilityId
  3. захвата скриншотов с saveScreenshot (» out.png ') -> это создаст „out.png“ файл в директории, где вы запускать тесты

В appium вы, наконец, будет иметь что-то вроде (JS), например:

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

IOS против Android accessibilityLabels

кажется, что для Android вы можете использовать accessibiltyLabel на любом элементе (например, текст, Вид и так далее), но IOS не будет устанавливать доступность всех элементов, таких как Adnroid.

Если установить метку на Text не будет равно ваша метка

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

даст вам маркировать равный content на прошивке, так что в основном вы можете просто установить accessible атрибут текстовых узлов для этой платформы

<Text accessible>content</Text> 

То же самое для View - iOS игнорирует ваши ярлыки.

Пока что многие элементы на iOS не будут работать с вашими специальными ярлыками доступности.

Ниже приведен список элементов, которые можно использовать для тестирования приложения для кроссплатформенного реагирующей родной тесты

Вы можете использовать:

  • TouchableHighlight - будет работать одинаково на прошивке и Android, вы можете просто набор accessibilityLabel
  • Text - accessibilityLabel должна быть такой же, как внутренний тест + вы должны установить Удобный доступ атрибуту

не будет работать (для обеих платформ в целом):

  • View

P.S. мы не проверяли все возможные элементы еще, так что добавлять результаты для других элементов или ждать результатов

отладочных

Вы можете получить источник корневого элемента, печать и читать его как XML для целей отладки (для webdriver.io: http://webdriver.io/api/property/getSource.html)

5

У меня есть PR против реагирования, чтобы добавить надлежащую поддержку для resource-id. Проверьте это и вверх-голосование пожалуйста: https://github.com/facebook/react-native/pull/9942

Как только это слиты в testID добавит resource-id так долго, как Id определено в res/values/ids.xml.

0

В настоящее время, если вы установили testID в свой слой реакции, который будет переведен в тег в android.

Затем с Espresso вы можете использовать предоставленный ViewMatcher withTagValue link

Тогда все, что вам нужно сделать, чтобы найти вид является

onView(withTagValue(is((Object) tagValue))).perform(click());