如何在Safari中打开网址并在Xcode 7中的UITests下返回应用程序?

Bar*_*zyk 12 swift ios9 xcode-ui-testing xcode7.1beta

这是我的自定义视图,其中"LondonStreet"是一个按钮.

在此输入图像描述

当我点击那个按钮时,我得到url并在Safari中打开它(它可以工作).然后我可以回去,使用"Back to Wishlist"按钮(它也有效).

在此输入图像描述

问题是当我尝试在UITests下测试它时.

itemsTable.cells.elementBoundByIndex(0).buttons["addressButton"].tap() //press the button to open link in Safari
Run Code Online (Sandbox Code Playgroud)

除此之外:

app.statusBars.buttons["Back to Wishlist"].tap() //go back, doesn't work, although it was recorded by Xcode itself.
Run Code Online (Sandbox Code Playgroud)

是一个错误:

UI测试失败 - 无法在5秒内获得屏幕截图.

还有问题导航器

UI测试失败 - 无法及时更新应用程序状态.

在此输入图像描述

mig*_*ser 39

从iOS 11开始,您可以使用XCUIApplication(bundleIdentifier :)初始化程序与其他应用程序进行交互.

要回到您的应用程序,您可以执行以下操作:

let myApp = XCUIApplication(bundleIdentifier: "my.app.bundle.id")
let safari = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari")

// Perform action in your app that opens Safari

safari.wait(for: .runningForeground, timeout: 30)
myApp.activate() // <--- Go back to your app
Run Code Online (Sandbox Code Playgroud)

  • 对于 Xcode 13 和 iOS 15,这似乎会间歇性失败“由于未捕获的异常‘NSInternalInconsistencyException’而终止应用程序,原因:‘无效的 pid -1’``` (3认同)

Joe*_*tti 8

UI测试无法与应用程序之外的任何内容进行交互.在您的方案中,一旦您的应用程序打开Safari,框架就再也无法执行任何操作.

要验证这一点,请在Safari打开后尝试打印应用程序的层次结构.您会注意到Safari和导航栏中的任何内容都不会显示 - 您只会看到应用程序的信息.

print(XCUIApplication().debugDescription)
Run Code Online (Sandbox Code Playgroud)

  • 此(我的)评论不再适用于 iOS 11+ :) (2认同)