使用 toBeVisible() 期望和 tap() 操作排毒部分可见按钮的行为不同

Posted

技术标签:

【中文标题】使用 toBeVisible() 期望和 tap() 操作排毒部分可见按钮的行为不同【英文标题】:Detox partially visible Button behaves differently using toBeVisible() expectation and tap() action 【发布时间】:2018-09-09 08:17:47 【问题描述】:

我有一个带有 ScrollView 和 Button 的屏幕,它位于最底部且部分可见,即按钮的顶部在屏幕中,但标题不可见,除非我向下滚动:

expect(element(by.id(BUTTON_IN_THE_BOTTOM))).toBeVisible() => 匹配器失败。 element(by.id(BUTTON_IN_THE_BOTTOM)).tap() => 一切正常,点击按钮。

这似乎是一种不一致,我认为框架应该在这种行为中保持一致。这是预期的行为吗?

正在使用 detox 7.3.2

【问题讨论】:

【参考方案1】:

很可能是我们的 ios 后端框架 Earl Grey 中的匹配器之间存在不一致。

不管怎样,你不滚动是在自找麻烦。屏幕上的位置取决于几个因素,包括设备尺寸、RN 布局系统和 OS 布局系统和内容。您不应该对像素精度做出真正的假设。通过不滚动可见的按钮,您将在不应该出现的地方引入片状。

【讨论】:

查看伯爵茶中tap() 的实现,我看不到对可见性的任何要求。所以这可能就是为什么你的点击成功而可见性断言没有成功的原因。在尝试对其进行操作之前,您应该始终将元素滚动到可见。【参考方案2】:

使用列表中的swipe action 到达屏幕底部,以便看到该按钮。如上所述,这将防止在小分辨率设备上进行测试等不稳定行为导致您的测试失败。

【讨论】:

以上是关于使用 toBeVisible() 期望和 tap() 操作排毒部分可见按钮的行为不同的主要内容,如果未能解决你的问题,请参考以下文章

无法为语义 UI 反应组件检查 expect(elm).not.toBeVisible()

如何解决 SwiftUI Tap 冲突?

React Native End to End Tests with Detox:获取匹配元素的高度、宽度和其他属性

如何告诉排毒等待我的元素出现

Uniapp中tap和click的区别?

mui和zepto的tap事件