17

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

我已按照本教程将 React Native 集成到现有应用程序中,以便能够编写测试。但是当我开始编写我的 UI 测试时,我无法找到要编写的内容以及如何定位一个组件并单击它。

我发现这篇文章有人举了一个例子,说明如何为 React Native 编写 Espresso 测试,但它对我不起作用......我的组件都没有设置资源 ID,所以我不知道如何执行一些操作我的应用程序。

如果有人可以帮助我在 React Native 应用程序上使用 Espresso 编写 UI 测试,或者给我另一个解决方案来自动截取我的 Android 应用程序的屏幕截图,那就太棒了。

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

4

3 回答 3

16

浓咖啡

目前无法使用 react-native 设置资源 ID,因此,要进行复杂的操作,您需要编写一些代码(例如等待元素),其他事情似乎通过 android studio 'record espresso test' 按钮工作得很好。

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

在这里你可以找到完整的测试https://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa

Appium

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

  1. 使用 propaccessibilityLabel作为元素的 id
  2. 在网络驱动程序中使用 waitForElementByAccessibilityId
  3. 使用 saveScreenshot('out.png') 捕获屏幕截图 -> 这将在您运行测试的目录中创建“out.png”文件

在 appium 中,您最终将拥有类似(js 示例)的内容:

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

iOS 与 Android 可访问性标签

似乎对于 Android,您可以accessibiltyLabel在任何元素(如文本、视图等)上自由使用,但 iOS 不会在所有元素(如 Adnroid)上设置可访问性。

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

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

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

<Text accessible>content</Text>

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

到目前为止,iOS 上没有多少元素可以与您的自定义辅助功能标签一起使用。

以下是可用于测试应用程序以进行跨平台 react-native 测试的元素列表

您可以使用:

  • TouchableHighlight- 将在 iOS 和 Android 上工作相同,你可以设置accessibilityLabel
  • Text-accessibilityLabel 应与内部测试相同 + 您必须设置可访问属性

不起作用(完全适用于两个平台):

  • View

PS我们还没有测试所有可能的元素,所以为其他元素添加你的结果或等待我们的结果

调试

您可以获取根元素的来源,将其打印并作为 xml 读取以进行调试(对于 webdriver.io:http://webdriver.io/api/property/getSource.html

于 2016-06-25T22:06:31.487 回答
5

我有一个反对 react-native 的 PR 来添加对resource-id. 请检查并投票:https ://github.com/facebook/react-native/pull/9942

一旦将其合并,testID只要resource-idId 定义在res/values/ids.xml.

于 2016-09-18T08:04:49.050 回答
2

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

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

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

onView(withTagValue(is((Object) tagValue))).perform(click());
于 2017-10-23T16:13:41.343 回答