XCUITest 如何关闭日期选择器弹出窗口
XCUITest How to dismiss date picker popover
在 iOS 15 中,我的应用程序中有一个使用 .compact
样式的日期选择器,因此它将日期和时间选择 UI 显示为弹出窗口。
我在 UI 测试中找不到关闭弹出窗口的方法,尝试了关闭弹出窗口的建议,例如:
app.otherElements["PopoverDismissRegion"]
(不存在)
app.otherElements["dismiss popup"].tap()
(不存在)
.windows.element(boundBy: 0).tap()
(刚好到达屏幕中心,它仍然是弹出窗口,所以没有任何用处)
我花了一些时间四处搜索,寻找可能有效的非日期选择器相关答案,但我发现 this answer,这表明这可行:
app.swipeDown(velocity: .fast)
我在 iPhone 模拟器上成功了,根据答案,它也适用于横屏 iPad,但不适用于竖屏。
复制答案,因为原始答案未引用日期选择器,因此更难找到!
令人难以置信的是,点击“提供的”关闭按钮不起作用,是吗?
我通过“强制”点击屏幕上我知道的另一个元素(header 文本)解决了这个问题。如果日期选择器覆盖了那个元素,这显然是行不通的,但在我的例子中它从来没有。
extension XCUIElement {
func forceTap() {
self.coordinate(withNormalizedOffset: CGVector(dx: 0.0, dy: 0.0)).tap()
}
}
在 iOS 15 中,我的应用程序中有一个使用 .compact
样式的日期选择器,因此它将日期和时间选择 UI 显示为弹出窗口。
我在 UI 测试中找不到关闭弹出窗口的方法,尝试了关闭弹出窗口的建议,例如:
app.otherElements["PopoverDismissRegion"]
(不存在)app.otherElements["dismiss popup"].tap()
(不存在).windows.element(boundBy: 0).tap()
(刚好到达屏幕中心,它仍然是弹出窗口,所以没有任何用处)
我花了一些时间四处搜索,寻找可能有效的非日期选择器相关答案,但我发现 this answer,这表明这可行:
app.swipeDown(velocity: .fast)
我在 iPhone 模拟器上成功了,根据答案,它也适用于横屏 iPad,但不适用于竖屏。
复制答案,因为原始答案未引用日期选择器,因此更难找到!
令人难以置信的是,点击“提供的”关闭按钮不起作用,是吗?
我通过“强制”点击屏幕上我知道的另一个元素(header 文本)解决了这个问题。如果日期选择器覆盖了那个元素,这显然是行不通的,但在我的例子中它从来没有。
extension XCUIElement {
func forceTap() {
self.coordinate(withNormalizedOffset: CGVector(dx: 0.0, dy: 0.0)).tap()
}
}