相关疑难解决方法(0)

Xcode 7 UI测试:如何在代码中解除一系列系统警报

我正在使用新的Xcode 7 UI测试功能编写UI测试用例.在我的应用程序的某些时刻,我要求用户允许相机访问和推送通知.因此会出现两个iOS弹出窗口:"MyApp Would Like to Access the Camera"弹出窗口和"MyApp Would Like to Send You Notifications"弹出窗口.我希望我的测试可以解雇两个弹出窗口.

UI录制为我生成了以下代码:

[app.alerts[@"cameraAccessTitle"].collectionViews.buttons[@"OK"] tap];
Run Code Online (Sandbox Code Playgroud)

但是,[app.alerts[@"cameraAccessTitle"] exists]解析为false,上面的代码生成错误:Assertion Failure: UI Testing Failure - Failure getting refresh snapshot Error Domain=XCTestManagerErrorDomain Code=13 "Error copying attributes -25202".

那么在测试中解除一堆系统警报的最佳方法是什么?系统弹出窗口会中断我的应用程序流并立即使我的正常UI测试用例失败.事实上,任何有关如何绕过系统警报以便我可以恢复测试通常流程的建议都表示赞赏.

这个问题可能与这个SO帖子有关,也没有答案:Xcode7 | Xcode UI测试| 如何处理位置服务警报?

提前致谢.

objective-c ios xctest xcode7 xcode-ui-testing

51
推荐指数
1
解决办法
2万
查看次数

在xCode 7.1中使用警报的UITesting

我正在xCode 7.1中编写UITests并且在测试警报时遇到问题(在我的情况下允许通知).在创建测试时,xCode会编写以下代码:

app.alerts["\U201cAppName\U201d Would Like to Send You Notifications"].collectionViews.buttons["OK"].tap()
Run Code Online (Sandbox Code Playgroud)

哪会立即导致错误:

文字中的转义序列无效

所以我用以下代码替换了xCode的代码:

app.alerts["\u{201c}AppName\u{201d} Would Like to Send You Notifications"].collectionViews.buttons["OK"].tap()
Run Code Online (Sandbox Code Playgroud)

但是当我运行UITest时,它失败并显示消息:

UI测试失败 - 未找到警报的匹配项

代码相同

app.alerts["“AppName” Would Like to Send You Notifications"].collectionViews.buttons["OK"].tap()
Run Code Online (Sandbox Code Playgroud)

我也试过了

app.alerts.collectionViews.buttons["OK"].tap()
Run Code Online (Sandbox Code Playgroud)

正如人们在这里所建议的,但同样的故事

我相信很多人在xCode 7.1中的UITesting期间遇到了这样的问题

请分享您的经验或任何解决方案.提前致谢!

xcode unit-testing alerts ios swift

7
推荐指数
1
解决办法
2948
查看次数

Swift UI测试 - 用户通知系统警报

我正试图通过跟随帖子中提供的流程来通过用户通知系统警报,这是在UI测试备忘单和SO上的一些其他帖子中提到的相同流程.

Xcode7 | Xcode UI测试| 如何处理位置服务警报?

我有一个奇怪的问题,我无法按下确定按钮.这是我的代码

    addUIInterruptionMonitorWithDescription("User Notifications") { (alert) -> Bool in
        let okButton = alert.buttons["OK"]
        let dontAllowButton = alert.buttons["Don\u{2019}t Allow"]

        print(okButton.frame)
        print(dontAllowButton.frame)

        okButton.tap() // Taps the dontAllowButton ??

        return true
    }

    launchFinished() // wait for app to load and notification to show
    app.tap()
Run Code Online (Sandbox Code Playgroud)

我使用后,测试成功进入处理程序,app.tap()并且找到并存在按钮,但实际上似乎无法点击确定按钮!当我尝试点击"确定"按钮时,它会点击"不允许"按钮,当我尝试点击"不允许"按钮时,它不会点击任何内容.

按钮的框架也与屏幕上的内容不匹配.

用户通知警报按钮

当我调试并查看它们的帧时:

okButton =(431.5,377.0,44.0,135.0)

dontAllowBtn =(431.5,512.0,44.0,135.0)

这似乎表明它们具有相同的X值,并且一个在另一个之上,这实际上没有任何意义.

此外,我已经尝试使用XCUICoordinate在按钮附近创建一些坐标并点击坐标而不是按钮,这对我在应用程序的其他位置工作正常,但似乎没有坐标点击注册.

我如何通过此警报?

编辑

我在使用Xcode 7.1.1,并且位置服务也出现了同样的问题.它似乎与横向模式有关,这使得它无法正常工作.当我创建一个新的测试应用程序并运行上面的代码时,它在纵向模式下工作正常.当我将其切换到横向模式时,它具有上述行为并且不起作用.

编辑2

我向Apple提交了一份错误报告.

swift xcode-ui-testing

5
推荐指数
0
解决办法
1047
查看次数

iOS UITesting:使用addUIInterruptionMonitorWithDescription自动处理所有系统提示

我已经读完了这两个.

Xcode7 | Xcode UI测试| 如何处理位置服务警报?

Xcode 7 UI测试:解除推送和位置警报

我能知道以下情况吗?

1)对于位置,放置"位置对话框"表示它将处理位置提示.它如何识别?

2)如何处理访问图库或相机的系统提示?是否有任何处理程序描述列表?

xcode ios xcode-ui-testing

4
推荐指数
1
解决办法
3059
查看次数

我可以为我的应用重置模拟器的联系人和位置权限设置,以模拟首次使用场景吗?

我的iOS应用程序目前有一个iOS 7的部署目标(虽然我的方案运行iOS 9.2模拟器),以及与AddressBook,AddressBookUI和CoreLocation框架的链接.我在Xcode 7中有一套Swift UI测试(不在Instruments中).当用户首次使用我的应用时,系统会要求他们在应用运行时访问其联系人及其位置.由于这涉及需要完美执行的大量代码,因此我希望自动化所有可能的结果并确保UI处于所需状态.

我可以使用Xcode UI测试重置模拟器的设置以访问联系人和位置吗?例如,我可以setUp()在我的测试用例类中的函数中实现它.我找到了一些关于如何响应对话框的教程,但在我到达那一点之前,我需要模拟请求权限的条件.这是一个解释如何响应此类警报的问题.

core-location abaddressbook xcode-ui-testing

2
推荐指数
1
解决办法
780
查看次数