UI测试时无法触发删除照片窗口
Posted
技术标签:
【中文标题】UI测试时无法触发删除照片窗口【英文标题】:Unable to trigger the Photo deletion window during UI testing 【发布时间】:2018-12-21 14:49:25 【问题描述】:我正在尝试在 XCode 10 中创建一个 UI 测试,其中包括将出现以下窗口的步骤:
(仅供参考 - 这是为了支持视频脚本的创建,因此我们希望为观看者提供完整的体验)
最初,我只是记录了步骤以确保我正确地捕获了这个请求屏幕,并且 XCode 尽职尽责地注销了所有步骤。
以下是 XCode 生成的稍作修改的版本。作为记录,使用未修改的版本也失败了。
func testDeletePhotos()
let app = XCUIApplication()
continueAfterFailure = false
app.launch()
// Select two images from within app to delete
let collectionViewsQuery = app.collectionViews
collectionViewsQuery.children(matching: .cell)
.element(boundBy: 1)
.children(matching: .other)
.element.children(matching: .other)
.element(boundBy: 1)
.tap()
collectionViewsQuery.children(matching: .cell)
.element(boundBy: 0).children(matching: .other)
.element.children(matching: .other)
.element(boundBy: 1)
.tap()
let navigationBar = app.navigationBars["MY_APP_NAME"]
// Select the "Trash can" in nav bar to start delete process
navigationBar.buttons["Delete"].tap()
// Prompt appears properly and text is a precise match for string below
// Below step fails with error seen below
app.alerts["Allow “MY_APP_NAME” to delete 2 photos?"].buttons["Delete"].tap()
navigationBar.buttons["Back"].tap()
但是,当我尝试重新运行此脚本时,它无法找到如上图所示的 删除 按钮。
UI 测试活动:断言失败:MyVideoScript.swift:###: 否 为查找找到匹配项:来自输入 ( 应用程序,pid:17838,标签:'MY_APP_NAME')
此外,由于有人可能会提到这一点 - 照片的数量是相同的,因为这会改变警报中出现的文本。我还尝试使用app.alerts.element(boundBy: 0)
代替名称搜索并得到相同的错误。
【问题讨论】:
【参考方案1】:点击可能在警报完成出现之前执行。你可以告诉测试等待它:
let deleteButton = app.alerts["Allow “MY_APP_NAME” to delete 2 photos?"].buttons["Delete"]
let exists = NSPredicate(format: "exists == 1")
expectationForPredicate(exists, evaluatedWithObject: deleteButton, handler: nil)
waitForExpectationsWithTimeout(5, handler: error in
// check for error, if none:
deleteButton.tap()
)
【讨论】:
谢谢,但这不会显示为警报,因为它是由操作系统驱动的,我无法直接与它交互。以上是关于UI测试时无法触发删除照片窗口的主要内容,如果未能解决你的问题,请参考以下文章
在 ubuntu 上使用 Skia 库测试无法获得 UI 显示
在玩笑测试中在 Material UI Select 上触发 mousedown 事件时,我总是收到“anchorEl”警告