浓缩咖啡
目前在react-native中没有设置资源ID的方法,因此为了执行复杂操作,您需要编写一些代码(例如等待元素),但通过android studio 'record espresso test'按钮执行其他操作似乎非常有效。
- 使用属性
accessibilityLabel
作为元素的ID(例如,“elementId”)
- 使用
onView(allOf(withContentDescription("elementId"), isDisplayed()))
获取元素
- 对该元素执行操作(例如
element.perform(click())
)
在这里您可以找到完整的测试https://gist.github.com/cybergrind/0a2ad855352a5cd47cb5fb6a486c5eaa
Appium
如果您只想执行操作并捕获屏幕截图,可以使用appium:
- 使用属性
accessibilityLabel
作为元素的ID
- 在Web驱动程序中使用waitForElementByAccessibilityId
- 使用saveScreenshot('out.png')捕获屏幕截图 - 这将在运行测试的目录中创建“out.png”文件
在appium中,您最终将拥有类似以下的内容(JavaScript示例):
driver.waitForElementByAccessibilityId('searchInputAcc', 5000)
.type('bold\n')
.sleep(5000)
.saveScreenshot('out.png')
iOS和Android的accessibilityLabels对比
在Android上,你可以自由地在任何元素(如Text、View等)上使用accessibilityLabel
,但是iOS不像Android那样会在所有元素上设置无障碍标签。
如果你在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应该与内部文本相同+您必须设置accessible属性
不会同时在两个平台上工作:
P.S. 我们尚未测试所有可能的元素,因此请添加其他元素的结果或等待我们的结果
调试
您可以获取根元素的源代码,将其打印并以XML格式读取以进行调试(对于webdriver.io:http://webdriver.io/api/property/getSource.html)