如何使用React Native的Espresso UItesting?

我正在尝试在我的React Native Android应用程序上使用Espresso进行一些UItesting,以使用Fastlane的Screengrab。

我遵循本教程将React Native集成到现有的应用程序中,以便能够编写testing。 但是当我开始编写我的UItesting时,我无法find写什么,以及如何定位组件,并执行一个单击它。

我发现这个职位,有人举例说明如何编写Espresso Test for React Native,但它不适用于我…我的组件都没有设置资源ID,所以我不知道如何执行一些操作我的应用程序。

如果有人能够帮助我在React Native应用程序上使用Espresso编写UItesting,或者给我另一个解决scheme,以获取我的Android应用程序的自动截图,那将是非常棒的。

如果您有任何问题,请告诉我。

Solutions Collecting From Web of "如何使用React Native的Espresso UItesting?"

浓咖啡

目前没有办法使用react-native来设置resource-id,所以为了使复杂的动作需要编写一些代码(比如等待元素),其他的东西似乎可以通过android studio的loggingespresso test来实现。

  1. 使用prop accessibilityLabel作为元素的id(例如“elementId”)
  2. 使用onView(allOf(withContentDescription("elementId"), isDisplayed()))来获取元素
  3. peform对该元素的操作(如element.perform(click())

在这里你可以find完整的testinghttps://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa

Appium

如果您只想执行操作并截取屏幕截图,则可以使用appium执行此操作:

  1. 使用prop accessibilityLabel作为元素的id
  2. 在web驱动中使用waitForElementByAccessibilityId
  3. 使用saveScreenshot('out.png')捕获屏幕截图 – >这将在您运行testing的目录中创build'out.png'文件

在appium你终于会有像(js例子):

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

iOS vs Android accessibilityLabels

看起来对于Android,你accessibiltyLabel在任何元素(如文本,视图等)上自由使用accessibiltyLabel ,但是iOS不会在Adnroid等所有元素上设置可访问性。

如果您在Text上设置标签,它将不等于您的标签

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

会给你在iOS上标签相同的content ,所以基本上你可以在这个平台的文本节点上设置accessible属性

 <Text accessible>content</Text> 

同样的事情View – iOS会忽略你的标签。

到目前为止,iOS上没有太多元素可以与您的自定义辅助function标签配合使用

以下是可用于testing跨平台反应原生testing应用程序的元素列表

您可以使用:

  • TouchableHighlight – 将在iOS和Android上工作,你可以设置accessibilityLabel
  • Text – accessibilityLabel应该是相同的内部testing+你必须设置可访问的属性

将无法工作(对于两个平台):

  • View

PS我们还没有testing过所有可能的元素,所以添加其他元素的结果或等待我们的结果

debugging

您可以获取根元素的源代码,打印并将其作为xml读取以进行debugging(对于webdriver.io:http://webdriver.io/api/property/getSource.html&#xFF09;

我有PR反对原生添加适当的resource-id支持。 检查出来,并投票请: https : //github.com/facebook/react-native/pull/9942

一旦在testID合并,只要Id在res/values/ids.xml定义,就会添加resource-id

目前如果你在你的反应层中设置testID,将会被android翻译成标签。

然后用Espresso,您可以使用提供的ViewMatcher withTagValue 链接

那么你所要做的就是find一个视图

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