在我的应用程序中使用 react-navigation 时,我遇到了类似的问题。我目前正在使用 react-navigation 2.2.0。
首先,我尝试了以下方法:
await element(by.label('Tab Name')).tap();
这很奏效,我很高兴,直到我尝试了一个不同的选项卡,其中选项卡名称与页面上的文本项匹配,这意味着有两个具有相同文本的标签,并且 Detox 被混淆了。因此by.label
,只有当您可以保证页面上存在该标签的一个实例时,使用才有用。
我发现解决这个问题的方法是设置tabBarTestID
屏幕的导航选项。只要您使用唯一的 ID,就应该没有冲突。
tabBarTestID
可以在屏幕组件中进行设置:
class TabScreen extends Component {
static navigationOptions = () => {
return {
title: 'Tab Name',
tabBarLabel: 'Tab Name',
tabBarAccessibilityLabel: 'Tab Name',
tabBarTestID: 'Tab Name',
tabBarIcon: ({ tintColor, focused }) => {
return getTabIcon('Tab Name', focused);
}
};
};
render () {
return (
<View>
...
</View>
);
}
}
export default TabScreen;
这意味着您现在应该能够在测试中使用:
await element(by.id('Tab Name')).tap();