Ошибка: Ошибка: не найдено подходящих представлений в иерархии: (со значением тега: "электронная почта", а представление имеет эффективную видимость =VISIBLE)
Привет, я делаю тест на детокс для реагирования родной версии Android 0.57. У меня есть два экрана запуска экрана и экран входа в систему. Я могу перейти на экран входа в систему, но во время тестирования элементов на экране входа в систему я получаю эту ошибку. Код является `
describe.only('test2', () => {
before(async () => {
await device.reloadReactNative();
});
it('should have welcome screen', async () => {
await expect(element(by.text('Welcome'))).toBeVisible();
});
it('should Click button', async () => {
await expect(element(by.id('login'))).toBeVisible();
await element(by.id('login')).tap();
});
it('should select email', async () => {
await expect(element(by.id('email'))).toBeVisible();
});
})
`
выполняя последнее, я получаю эту ошибку. помогите мне решить эту проблему.
функция рендеринга
render() {
return (
<View style={styles.mainContainer} testID='email'>
{this.renderTopLogoContainer()}
{this.renderBottomContainer()}
<View style={{ height: 30, justifyContent: 'center' }}>
{this.state.useMobile ? <Text style={{ color: colors.SECONDARY_FONT_COLOR, alignSelf: 'center', fontSize: 13, }} onPress={() => { this.setState({ useMobile: false, wrongEntryMesaage: '', userName: "" }) }}>{I18n.t("Use email")}</Text> : <Text style={{ color: colors.SECONDARY_FONT_COLOR, alignSelf: 'center', fontSize: 13 }} onPress={() => { this.setState({ useMobile: true, wrongEntryMesaage: '', userName: "" }) }}>{I18n.t("Use mobile")}</Text>}
</View>
<Button
rounded title={I18n.t("GET OTP")}
buttonStyle={styles.button}
disabled={
this.state.useMobile ? (this.state.userName.length === 10) && (this.props.processingRequest) || !(this.state.userName.length === 10) && !(this.props.processingRequest)
: (this.state.userName.length > 0) && (this.props.processingRequest) || !(this.state.userName.length > 0) && !(this.props.processingRequest)}
onPress={this.onGetOTPForUserNamePressedDebounced}
/>
{this.props.getOtpFailed ? Snackbar.show({
title: this.props.error.display_message,
duration: Snackbar.LENGTH_LONG
}) : null}
</View>
);
}
1 ответ
Проверьте иерархию представления для testID
Таким образом, при попытке отладки testID, которые не отображаются, вы должны проверить иерархию представлений, это проще всего сделать в iOS. Инструкции по выполнению этого можно найти здесь https://github.com/wix/Detox/blob/master/docs/Troubleshooting.RunningTests.md#debug-view-hierarchy
Попробуйте тайм-аут
Если это в иерархии представлений, то Detox может ожидать testID
прежде чем он на самом деле отображается. Вы можете отредактировать свой последний тест, чтобы он использовал waitFor
с таймаутом.
Нечто подобное может сработать. Хотя вам может потребоваться настроить время ожидания await waitFor(element(by.text('email'))).toBeVisible().withTimeout(2000);
Смотри свой тест
Вы также должны посмотреть свой тест и убедиться, что он работает так, как ожидается. Навигация с экрана на экран? Вы видите кнопки, которые нажимаются?
Возможно, даже если нажать кнопку, навигация не происходит.