Xcode 11 XCUITest无法获取匹配的快照:获取主窗口kAXErrorServerNotFound时出错

dpiehjr4  于 2023-04-22  发布在  其他
关注(0)|答案(7)|浏览(175)

在Xcode 11中构建了我的应用程序并运行了我的XCUITests套件之后,我遇到了许多随机失败,如下所示。
无法获取匹配的快照:获取主窗口kAXErrorServerNotFound时出错
无论我增加超时多长时间,问题都会间歇性地出现。它似乎在快照UI层次结构方面有问题。我们的测试在Xcode 10中始终通过。
我已经重新安装了Xcode。删除了所有模拟器。清除了派生数据。修改了超时。从Xcode 11.1升级到Xcode 11.2.1。
谢谢!

yhqotfr8

yhqotfr81#

我在Xcode 11.3中运行简单的UITest时遇到了匹配问题。为了让它工作,我必须首先粘贴:XCUIApplication().activate()XCUIApplication().launch()

wi3ka0sx

wi3ka0sx2#

我在Xcode 11中也遇到过同样的问题,我意识到当停止测试时(或者测试由于某种原因崩溃),测试运行者并没有被杀死。第二次运行测试会产生一个新的测试运行者,在这一点上,我有两个运行者试图与同一个应用程序交互,导致这个非常奇怪的错误。
为了证明我做了以下事情:
1.创建了在文本视图中键入长文本的UI测试
1.运行测试,当文本视图中有几个句子时手动停止测试
1.在模拟器中手动打开应用程序(不是通过运行测试)
1.观察到随机字符出现在文本视图中,即使没有运行任何测试。
解决方法是退出并重新打开模拟器,以确保所有进程都被杀死。希望这能解决您的问题

eqoofvh9

eqoofvh93#

我在Xcode 11.1中不时遇到这个问题。我观察到这个问题发生在等待UI元素时,特别是在测试过程中显示Web视图时。当问题发生时,我正在使用XCUIElement.waitForExistence(timeout:)NSPredicate(format: "exists == true")的期望。当我更改为NSPredicate(format: "hittable == true")的期望时,问题似乎消失了,但我不知道为什么。这两个属性之间的区别是hittable只检测屏幕上的元素,而exists检测屏幕外的元素,如表视图的屏幕外单元格。

expectation(for: NSPredicate(format: "hittable == true"), evaluateWith: element, handler: nil)
waitForExpectations(timeout: 60, handler: nil)
r7s23pms

r7s23pms4#

我使用不同的机器。我的旧Mac更经常遇到这个错误。我猜是旧Mac没有正确运行某些XCUITests所需的内存。

n7taea2i

n7taea2i5#

我在Xcode 11上遇到了类似的问题。
事实证明,在此之前,它被允许在许多页面中具有相同的可访问性标识符。
但是现在使用新的模态表示样式,您应该在页面中使用不同的标识符以避免冲突。

yk9xbfzb

yk9xbfzb6#

如果您使用的是fastlane,则可以使用以下车道轻松解决:

# Unit tests

  lane :tests do
    clear_derived_data
    scan(
      workspace: "AppTest.xcworkspace",
      devices: ["iPhone 8"], # it can be with the iPhone that has your VM
      force_quit_simulator: true,
      reset_simulator: true,
      reinstall_app: true,
      scheme: "AppTest"
    )
  end

理论上,您必须重置模拟器并重新安装应用程序。
快乐编码

tcbh2hod

tcbh2hod7#

对我来说,调用activate()两次是解决方案。这不是我第一次遇到问题。我有其他测试需要调用应用程序回到前台,调用activate一次是不够的。

XCUIApplication().activate()
XCUIApplication().activate()

听起来很奇怪,我知道,但给予看。

相关问题