对 Bitrise 的测试(有些一致,有些不一致)失败并出现 "AX action" 错误

Tests on Bitrise (some consistently, some inconsistently) failing with "AX action" errors

我在 XCUITest 框架中为一个非常重要的应用程序(该应用程序的存在时间比我在这家公司的时间长几年)编写了许多测试。所有测试在我的笔记本电脑和其他工程师的笔记本电脑上始终如一地通过。

当 运行 在 Bitrise 上进行测试时,第一个 UI 测试每次在设置阶段都会失败,并显示以下消息:

testFixtureAttachment, UI Testing Failure - Failed to perform AX action for monitoring the animations of (app), error: Error -25204 performing AXAction 2043

其他测试通常会通过,但有时会因错误而失败,例如:

UI Testing Failure - Failed to perform AX action for monitoring the event loop of (app), error: Error -25204 performing AXAction 2042

UI Testing Failure - Failed to scroll to visible (by AX action) TextField 0x7fe800f9fa20: traits: ... error: Error -25204 performing AXAction 2003

我怎样才能解决这个问题,至少,我的第一个测试不会总是在设置时失败?

这通常与较慢的环境有关。 Xcode 不能很好地保证 UI 在较旧和较慢的机器上执行测试。对于虚拟化环境(如 Bitrise.io 使用的环境)以及旧机器或使用 HDD 存储而不是 SSD 的机器都是如此。

根据您的项目,有一些解决方法可能有用也可能没用。您可以在以下位置找到相关问题和可能解决方案的列表:https://bitrise-io.github.io/devcenter/ios/known-xcode-issues/.

来自link,在大多数情况下有效的解决方案:

  • 尝试另一个 Xcode 版本。
  • 尝试另一个模拟器设备(例如 "iPhone 6" 中的测试而不是 运行 尝试 "iPhone 6s Plus")
  • 一些用户成功地将测试拆分为多个方案,运行 将这些方案分开,使用单独的测试步骤。
  • 其他人报告说,如果您在 app.launch() 之后添加延迟,它可以为 Xcode / iOS 模拟器留出足够的时间来初始化辅助功能标签,因此 UI 测试可以通过辅助功能标签正确找到元素。

相关 Whosebug 和其他论坛 links:

根据 XCUITest 团队的反馈,发生这种情况是因为模拟器 CPU-starved 并且 AX Action 在启动应用程序时超时。通过使用电源管理来降低我的 CPU.

,我能够在我自己的机器上重现此问题(通常不会出现故障)

增加 Bitrise 中的 CPU 分配是显而易见的解决方案。然而,还有另一种奇怪的解决方案!

在测试设置函数之前,我有以下行:

let app = XCUIApplication()

这允许我的各种测试调用 app. 而不是更长的完整语法。

发现删除此行可防止错误发生。这是通过这个 Apple Developer 论坛线程找到的:

https://forums.developer.apple.com/thread/4472

所以...希望这为其他人解决了这个问题,但它为我解决了这个问题。