Ошибка: Ошибка: в иерархии не найдено подходящих представлений: (со значением тега: "электронная почта" и представление имеет эффективную видимость = ВИДИМО)

Привет, я делаю детокс-тест для реакции на родную версию 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>
);

}

Можете ли вы показать код, в котором вы установили свой testID для электронной почты?

Andrew 27.12.2018 14:25

Благодарим вас за ответ, render () {return (<View style = {styles.mainContainer} testID = 'email'> ------------------- code --- ---------- </View>); }

Krupanand K 27.12.2018 18:11

Отредактируйте свой пост и поместите код туда, а не в комментарий. Вам также, вероятно, следует показать весь компонент.

Andrew 27.12.2018 18:19

Извините, у меня обновленный вопрос

Krupanand K 27.12.2018 18:40
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
2
4
1 492
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проверьте иерархию представлений для testID

Поэтому при попытке отладки не показываемых testID вы должны проверить иерархию представлений, это проще всего сделать в iOS. Инструкцию по выполнению можно найти здесь https://github.com/wix/Detox/blob/master/docs/Troubleshooting.RunningTests.md#debug-view-hierarchy

Попробуйте тайм-аут

Если он находится в иерархии представлений, то Detox может ожидать testID до того, как он действительно отобразится. Вы можете отредактировать свой последний тест так, чтобы он использовал waitFor с таймаутом.

https://github.com/wix/Detox/blob/master/docs/Troubleshooting.RunningTests.md#test-tries-to-find-my-component-before-its-created

Что-то вроде этого может сработать. Хотя вам может потребоваться настроить время тайм-аута await waitFor(element(by.text('email'))).toBeVisible().withTimeout(2000);

Смотрите свой тест

Вам также следует посмотреть свой тест и убедиться, что он работает должным образом. Это переход с экрана на экран? Вы видите, как нажимаются кнопки?

Возможно, даже если он нажимает кнопку, навигация не происходит.

Спасибо. Это работает, я потратил весь свой день, чтобы найти этот ответ

Krupanand K 27.12.2018 19:13

Привет, у меня проблема, поможете ли вы мне stackoverflow.com/q/53958668/10031919?stw=2

Krupanand K 28.12.2018 13:33

Другие вопросы по теме