我正在尝试在我的React Native Android应用程序上使用Espresso进行一些UItesting,以使用Fastlane的Screengrab。
我遵循本教程将React Native集成到现有的应用程序中,以便能够编写testing。 但是当我开始编写我的UItesting时,我无法find写什么,以及如何定位组件,并执行一个单击它。
我发现这个职位,有人举例说明如何编写Espresso Test for React Native,但它不适用于我…我的组件都没有设置资源ID,所以我不知道如何执行一些操作我的应用程序。
如果有人能够帮助我在React Native应用程序上使用Espresso编写UItesting,或者给我另一个解决scheme,以获取我的Android应用程序的自动截图,那将是非常棒的。
如果您有任何问题,请告诉我。
目前没有办法使用react-native来设置resource-id,所以为了使复杂的动作需要编写一些代码(比如等待元素),其他的东西似乎可以通过android studio的loggingespresso test来实现。
accessibilityLabel
作为元素的id(例如“elementId”) onView(allOf(withContentDescription("elementId"), isDisplayed()))
来获取元素 element.perform(click())
) 在这里你可以find完整的testinghttps://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa
如果您只想执行操作并截取屏幕截图,则可以使用appium执行此操作:
accessibilityLabel
作为元素的id 在appium你终于会有像(js例子):
driver.waitForElementByAccessibilityId('searchInputAcc', 5000) .type('bold\n') .sleep(5000) .saveScreenshot('out.png')
看起来对于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过所有可能的元素,所以添加其他元素的结果或等待我们的结果
您可以获取根元素的源代码,打印并将其作为xml读取以进行debugging(对于webdriver.io:http://webdriver.io/api/property/getSource.html)
我有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());