【发布时间】:2018-12-20 22:19:27
【问题描述】:
我让 自动化 用 detox 反应原生测试,它有下一个屏幕序列 A -> B -> C 我希望回到屏幕 B <- C.
有解决办法吗?
【问题讨论】:
标签: react-native automated-tests react-navigation react-native-navigation detox
我让 自动化 用 detox 反应原生测试,它有下一个屏幕序列 A -> B -> C 我希望回到屏幕 B <- C.
有解决办法吗?
【问题讨论】:
标签: react-native automated-tests react-navigation react-native-navigation detox
后退按钮上有一个testId,所以你可以这样做:
await element(by.id("header-back")).tap();
【讨论】:
有时
await element(by.id("header-back")).tap();
不工作而且
await element(by.traits(['button']))
.atIndex(0)
.tap();
选择另一个按钮。在这种情况下,假设它是堆栈导航器,您可以尝试在 ios 上使用向右滑动。使用外部容器视图
await element(by.id('containerView')).swipe('right', 'fast', 0.1);
【讨论】:
解决方案是按如下方式使用特征按钮:
等待元素(by.traits(['button'])).atIndex(0).tap();
【讨论】:
你可以继续创建一个实用程序
export const pressBack = async () => {
if (device.getPlatform() === 'android') {
await device.pressBack(); // Android only
} else {
await element(by.traits(['button']))
.atIndex(0)
.tap();
}
};
【讨论】:
如果您使用的是react-native-navigation,您可以使用:
const backButton = () => {
if (device.getPlatform() === 'ios') {
return element(by.type('_UIBackButtonContainerView'));
} else {
return element(by.label('Navigate Up'));
}
};
...
await backButton().tap();
对于 detox@17.3.6 和 react-native-navigation@6.10.1 中的 iOS,您可以使用:
return element(by.id('pop'));
【讨论】:
另一种可行的方法是
await element(by.id('header-back')).atIndex(0).tap()
这使用了内置的 testID,即 react-navigation v5 附带的默认后退按钮。您可能需要弄乱 atIndex() 数字,因为对我来说它似乎匹配 2 个后退按钮,但第一个是我正在寻找的那个。
【讨论】: