移动模拟器/模拟器 Detox 屏幕截图工件在不同主机上运行时会有所不同

Posted

技术标签:

【中文标题】移动模拟器/模拟器 Detox 屏幕截图工件在不同主机上运行时会有所不同【英文标题】:Mobile emulator/simulator Detox screenshot artifacts differ when run on different hosts 【发布时间】:2020-09-22 10:41:40 【问题描述】:

我正在本地使用 Detox 截屏并将它们提交到我的源代码库。在持续集成(Circle/macOS 执行程序)中,我再次运行测试并检测任何文件差异。基本上是视觉回归测试的一种形式。出乎意料的是,PNG 文件在 CI 上运行时会有所不同。这发生在 iosandroid 上。检查在 CI 上运行的生成的 PNG 文件,RGB 值随机相差 1。例如 RGB(23,42,23) 与 RGB(23,42,24)。差异可能在任何颜色通道中。抽查结果,通常只有一个通道(但可能不止一个)。

一些注意事项:

对于 Android,Detox 似乎使用了 adb screencap 命令,看起来它可以发出原始或 PNG 输出(Detox 使用后者)。 测试中使用了相同的模拟器 (Android) 和模拟器 (iOS) 类型

所以我的问题是:

在给定相同输入的情况下,PNG 输出是否具有确定性? adb screencap(以及 Detox 使用的 iOS 上的等价物)是否会导致此问题?

【问题讨论】:

【参考方案1】:

这是预期的行为,也将在 iOS 上发生。

例如看这个issue类似的问题: https://github.com/uber/ios-snapshot-test-case/issues/109

操作系统、CPU 和 GPU 硬件的差异都会导致渲染上的细微差异,您可以尝试通过在比较容差方面留出一些余地来应对,但这绝不是灵丹妙药,也并非总是可行的。

在我看来,屏幕截图比较不是一个好主意,并且会给您的测试带来很多不稳定因素。

【讨论】:

你能解释一下为什么你对屏幕截图比较感到消极吗?如果截图是相同的,难道不应该没有片状的理由吗?就上下文而言,我是一名网络开发人员而不是移动开发人员,所以我可能对移动有一些误解。在网络上,通过 DOM(即 Percy)的屏幕截图比较对我来说非常有效,但与原始快照相比,它具有一些明显的稳定性优势。 即使您忽略了您遇到的硬件渲染问题,屏幕截图比较也依赖于太多的系统来工作。 iOS/Android 布局系统和外观,RN 布局和外观等。你很难让它始终如一地工作。

以上是关于移动模拟器/模拟器 Detox 屏幕截图工件在不同主机上运行时会有所不同的主要内容,如果未能解决你的问题,请参考以下文章

在模拟器和移动设备中查看时布局错位

设备上的时间分析器与模拟器不同

iTunes Connect 不再接受 iPad 屏幕截图

Detox 框架可以在模拟器/模拟器上拍照吗?

更改 iOS 模拟器保存的屏幕截图的位置

在使用 Detox 运行测试期间,Android 模拟器无法启动应用程序