我已经能够在我的UITests中成功运行ApplePay,但是一旦显示PKPaymentAuthorizationViewController,该视图上的所有元素都无法定位,并且任何在底层应用程序视图上选择元素的尝试都会导致错误“.. ......不是最重要的“。
是否有其他人遇到此问题和/或有任何想法如何解决它?
答案 0 :(得分:3)
Apple Pay UI会在流程外显示(即使您使用UIViewController
子类触发它),因此我认为您无法通过UI测试来获取它。它是在流程外呈现的,因此应用程序无法修改或操纵Apple Pay视图。
答案 1 :(得分:1)
UI测试无法与应用程序之外的任何内容进行交互。在您的方案中,一旦您的应用程序显示Apple Pay视图,框架就再也无法执行任何操作。
要验证这一点,请在视图显示后尝试打印应用程序的层次结构。您会注意到Apple Pay和导航栏中的任何内容都不会显示 - 您只会看到应用程序的信息。
print(XCUIApplication().debugDescription)
答案 2 :(得分:0)
这有点棘手,但这是您可以执行的操作:
// create passbook app
let applePay = XCUIApplication(bundleIdentifier: "com.apple.PassbookUIService")
// wait for an auth controller to appear
_ = applePay.wait(for: .runningForeground, timeout: 5)
// tap pay button
applePay.buttons["Pay with Passcode"].tap()
此后授权将成功,您将获得苹果付款数据。
但是还有“一件事”-模拟器上的数据将为空,因此,如果尝试对其进行序列化,则会收到错误消息。所以我将数据模拟用于模拟器:
#if targetEnvironment(simulator)
print("WARNING! SIMULATING APPLE PAY!")
let payObject = [String: Any]()
#else
let payObject = try JSONSerialization.jsonObject(with: encryptedData, options: [])
#endif
// send payObject to server