XCUITest 无法识别警报

Posted

技术标签:

【中文标题】XCUITest 无法识别警报【英文标题】:XCUITest not recognizing alert 【发布时间】:2018-07-20 11:46:02 【问题描述】:

我是 XCUITest 的新手,遇到了无法识别警报的问题。

我使用录音机来获取命令,但是当我尝试播放它时,它失败并显示错误提示:

未找到匹配项查找:后代匹配类型警报来自输入...

let app = XCUIApplication()
    app.navigationBars["Spree.HomeWebView"].children(matching: .button).element(boundBy: 1).tap()
    app.alerts["Select a Saved Password to Use With “Spree-DEBUG”"].buttons["Not Now"].tap()  

我认为可能是字符串中的双引号有问题,但是当我尝试以下操作时:

app.alerts["Select a Saved Password to Use With \“Spree-DEBUG\”"].buttons["Not Now"].tap()

它在文字中表示无效的转义序列。

【问题讨论】:

【参考方案1】:

由于您要查询警报内的按钮,您可以省略查询的整个警报下标部分。就像:

app.alerts.buttons["Not Now"].tap()

这是因为您可能不会同时显示多个警报,因此查询所有 alerts 应该会给出您需要的警报,因为您只有一个,对吧:)

【讨论】:

感谢您的回复,但是当我尝试运行时,出现以下错误:UI 测试活动:断言失败:CheckoutKeywords.swift:36:未找到匹配项:查找的后代匹配类型警报来自输入(应用程序,0x6000003805b0,pid:14258,标签:'Spree-DEBUG') 好的,那是系统按钮吗?像通知或位置权限警报。或者它是来自您的应用程序前面弹出的任何其他应用程序的警报吗?此外,该警报是否需要时间才能出现(超过 1-2 秒)? 它是一个系统按钮,我可以在层次结构中找到它,但是在测试运行时它无法拾取它。加载需要几秒钟,但我已经等待(现在只使用 sleep (15))以确保它在测试查找之前显示。 您应该能够通过:let springboardApp = XCUIApplication(bundleIdentifier: "com.apple.springboard")springboardApp.alerts 定位系统警报。【参考方案2】:

最后,我找到了一个真正的解决方案,基本上 ios 11-12 与处理程序一起工作正常,但如果你在自动化期间卸载应用程序,iOS13 就不行。因此,正如人们提供的那样,您需要使用跳板活动来处理不属于应用程序的警报,并得出结论:

    处理 addUIInterruptionMonitor 处理 app.alerts 跳板警报

【讨论】:

以上是关于XCUITest 无法识别警报的主要内容,如果未能解决你的问题,请参考以下文章

视图中的 Asp.net 部分视图无法从视图中识别

XCUITest:自动接受系统警报。需要更细粒度的控制

手势识别+警报视图

vSAN集群 无法识别磁盘处理

电脑无法识别耳机怎么解决 电脑无法识别耳机解决方法

ActiveMQ 无法识别 Stomp:传输方案无法识别:[stomp+ssl]