错误:错误:层次结构中没有找到匹配的视图:(标签值:是“电子邮件”并且视图具有有效的可见性=可见)

Posted

技术标签:

【中文标题】错误:错误:层次结构中没有找到匹配的视图:(标签值:是“电子邮件”并且视图具有有效的可见性=可见)【英文标题】:Error: Error: No views in hierarchy found matching: (with tag value: is "email" and view has effective visibility=VISIBLE) 【发布时间】:2019-05-25 12:08:26 【问题描述】:

您好,我正在为 react native 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 的位置显示代码吗? 感谢您的回复,render() return ( --------------- --code---------- ); 编辑您的帖子并将代码放在那里,而不是在评论中。您还应该展示完整的组件。 抱歉,我更新了问题 【参考方案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);

观看你的测试

您还应该观察您的测试并确保它按预期执行。它是从一个屏幕导航到另一个屏幕吗?你能看到被点击的按钮吗?

也许即使它正在单击按钮,导航也不会发生。

【讨论】:

谢谢。它有效,我浪费了我一整天的时间来找到这个答案 你好,我有这个问题你能帮我吗***.com/q/53958668/10031919?stw=2

以上是关于错误:错误:层次结构中没有找到匹配的视图:(标签值:是“电子邮件”并且视图具有有效的可见性=可见)的主要内容,如果未能解决你的问题,请参考以下文章

Android Espresso - 嵌套父母的组合视图匹配器

在扩展中出现错误“视图层次结构没有为约束做好准备”

iOS viewWillAppear 错误:“视图不在窗口层次结构中”

“视图层次结构没有为约束做好准备”错误 Swift 3

Android 错误“只有创建视图层次结构的原始线程才能触摸其视图”

如何解决此错误“警告:尝试呈现其视图不在窗口层次结构中”?