iOS UITesting 如何关闭弹出框(iPad 弹出框不提醒样式)

Posted

技术标签:

【中文标题】iOS UITesting 如何关闭弹出框(iPad 弹出框不提醒样式)【英文标题】:iOS UITesting How to Dismiss Popover (iPad Popover NOT Alert Style) 【发布时间】:2017-01-27 08:59:48 【问题描述】:

我有一个非常复杂的应用程序,其中包含大量视图和弹出框,用于快速选择条目。

我无法关闭弹出框。我尝试了很多:

在窗口中点击坐标 app.otherElements["PopoverDismissRegion"] 击中后面的元素 弹出框(根本无法点击)

当我在 XCode 中记录它时,我得到: app.otherElements["PopoverDismissRegion"]

这对我来说毫无意义。

希望有人能提供帮助。

谢谢

信息ios 10.2,Xcode 8.2.1, iPad Air 2(设备和模拟器,结果相同)

【问题讨论】:

你的问题不清楚,你到底想做什么? XCode 7 UI Testing: Dismissal of system-generated UIAlertController does not work的可能重复 @vaibhav:什么不清楚?我有一个 iPad 风格的弹出框。我试图忽略这一点。 @Elist 弹出框没有按钮,所以不,它不是重复的。 【参考方案1】:

编辑

找到了更好的解决方案here:

XCUIApplication().otherElements["PopoverDismissRegion"].tap()

原解决方案:

试试这个:

XCUIApplication().windows.element(boundBy: 0).tap()

点击窗口并关闭当前活动的弹出框。

【讨论】:

我以前试过这个,看看我的第二个子弹。这也被建议了很多,但它对我没有用。它可能适用于警报控制器,但不适用于显示为导航栏项目弹出框的表格视图。【参考方案2】:

只需执行以下操作,iPhone 模拟器上的一切都对我有用:

app.swipeDown(velocity: .fast)

当我想在 iPad 模拟器上运行相同的测试时,我开始遇到问题。正在应用该手势,但它还不足以关闭视图。我尝试了不同的方法,例如:

XCUIApplication().windows.element(boundBy: 0).tap()

app.otherElements["PopoverDismissRegion"].tap()

但没有任何工作。该视图仍未被关闭。

对其进行更多测试后,我发现如果 iPad 模拟器处于横向状态,发送 swipeDown 手势实际上会关闭视图。所以...我能够像这样解决问题:

// If iPad, put the simulator on landscape mode
if UIDevice.current.userInterfaceIdiom == .pad  
    XCUIDevice.shared.orientation = .landscapeLeft


// Perform the swipe
app.swipeDown(velocity: .fast)

// Restore device portrait mode
if UIDevice.current.userInterfaceIdiom == .pad  
    XCUIDevice.shared.orientation = .portrait

【讨论】:

以上是关于iOS UITesting 如何关闭弹出框(iPad 弹出框不提醒样式)的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 中检测弹出框关闭

如何关闭 iPhone 5 iOS 6 中的弹出框?

如何以编程方式关闭/禁用 iOS 11 中引入的屏幕截图弹出框?

弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿

XCUITest 如何关闭日期选择器弹出框

iOS弹出框如何去除阴影