如何在使用 Xcode 11 & iOS 13 的 UI 测试期间关闭 UIActivityViewController

How to dismiss the UIActivityViewController during a UI test with Xcode 11 & iOS 13

Apple 重新设计了出现的共享 sheet,现在已经破坏了我的 UI 测试。

我试图通过 Xcode 记录一个新的 UI 测试,但是只要我点击关闭按钮,测试就会终止,所以我无法捕获该事件。

最后,我只想知道如何访问下面箭头所示的灰色 'X':

我刚刚用 Xcode 13 测试了这个,发现原来的答案不再有效。但是,我保留它以供后代使用,或者为那些使用 Xcode.

以前版本的人保留

Xcode 13

我已经用 Xcode 13.0 测试过它并验证它适用于 iPhone 和 iPad:

let activityListView = app.otherElements.element(matching: .other,
                                                 identifier: "ActivityListView")
XCTAssertTrue(activityListView.waitForExistence(timeout: 2.0))
activityListView.buttons["Close"].tap()

以前的版本

经过反复试验,我能够通过以下内容找到我的特定元素所在的位置:

app.otherElements.element(boundBy: 1).buttons.element(boundBy: 0).tap()

使用 app.otherElements.element(boundBy: 1) 会为我确定份额 sheet。我试图通过可访问性标识符找到它,但我找不到有效的标识符,包括以前在 iOS 12 及以下版本中使用的有效标识符。

Please note that based on the layout of your screen, the index value may differ from what I am seeing.

接下来,.buttons.element(boundBy: 0).tap() 用于定位关闭 按钮。我再次尝试使用标识符,但找不到任何代表按钮的东西。

当我在测试时尝试通过控制台辨别其他信息时,我总是会导致测试崩溃。这个结果令人惊讶,因为我能够使用 Xcode 10.

查询这些元素

最终,我想找到工作标识符值,这样我就可以拥有跨产品可靠工作的东西,而无需反复试验来找到共享 sheet 的索引值。

对于iPad

以下将关闭 iPad 的弹出窗口:

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