Ошибка: Ошибка: не найдено подходящих представлений в иерархии: (со значением тега: «электронная почта», а представление имеет эффективную видимость = VISIBLE) - PullRequest
0 голосов
/ 27 декабря 2018

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

0 голосов
/ 27 декабря 2018

Проверьте иерархию представлений для 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);

Наблюдать за вашим тестом

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...