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 无法识别警报的主要内容,如果未能解决你的问题,请参考以下文章