标签: xcode-ui-testing

XCUITesting权限弹出:出现警报,但UIInterruptionMonitor不会触发

我想写一个这样的测试:

当我的应用程序转到某个窗格时,它应该请求使用相机的权限.

我想测试窗格是否出现.我正在使用XC的内置UITest框架来执行此操作.根据我在谷歌和这里发现的,似乎我应该做以下事情:

let dialogAppearedExpectation = expectationWithDescription("Camera Permission Dialog Appears")

addUIInterruptionMonitorWithDescription("Camera Permission Alert") { (alert) -> Bool in
    dialogAppearedExpectation.fulfill()
    return true
}

goToCameraPage()

waitForExpectationsWithTimeout(10) { (error: NSError?) -> Void in
    print("Error: \(error?.localizedDescription)")
}
Run Code Online (Sandbox Code Playgroud)

测试始于失败,很棒.我实现了goToCameraPage,它正确地导致出现"给予权限"弹出窗口.但是,我希望这会触发中断监视器.然而,没有捕获到这样的中断,并且不会发生履行.

我在某个地方读到app.tap()了对话框出现后你应该做的事情.但是,当我这样做时,它会单击"允许"按钮.对话框消失,仍然没有处理中断.

是否有某种方式将权限对话框视为"警报"或无法处理?我甚至进入并用一个看起来的东西替换了中断位app.alerts,但结果是空的,即使我正在看模拟器中的弹出窗口.

谢谢!我正在为iPhone 6s使用Xcode7.2,iOS 9.2模拟器.

ios swift xcode-ui-testing xcode7.2

8
推荐指数
2
解决办法
2890
查看次数

UI测试 - isSelected始终返回false

我们最近使用Xcode 8.2.1(8C1002)将Swift 2.3项目更新到Swift 3,现在我们与tableViews和isSelected属性相关的大多数UI测试都不起作用.它总是返回false,即使选择了对象(我们可以在iOS模拟器中看到它).

有没有人遇到类似的问题?我们的代码曾经在转换之前在Swift 2.3中正常工作.以下是我们检索tableView单元格的方法:

let cell = app.tables.cells.element(at: 4)
Run Code Online (Sandbox Code Playgroud)

注意: app是XCUIApplication.

这是我们检查它是否被选中的方式:

XCTAssert(cell.isSelected)
Run Code Online (Sandbox Code Playgroud)

另一个观察是我们确定该对象存在,因为waitForExpectations它返回true:

let existsPredicate = NSPredicate(format: "exists = 1")
expectation(for: existsPredicate, evaluatedWith: cell, handler: nil)
waitForExpectations(timeout: 20, handler: nil)
Run Code Online (Sandbox Code Playgroud)

编辑:为了替换isSelected,我尝试使用NSPredicate selected = 1isSelected = 1.没有用.我也尝试使用acessibilityValue基于其他问题的答案,但它并不那么简单,因为有时我的表视图中的项目是以编程方式选择/取消选择的.此外,该方法涉及向应用程序添加测试代码,这不是一个好习惯.

在BOUNTY END之后编辑:由于没有人能找到解决该问题的解决方案,这显然是Xcode中的一个错误,我已向Apple提交了错误报告.当他们发布带有修复的Xcode版本时,我会在这里发表评论.

ios swift xcode-ui-testing swift3

8
推荐指数
1
解决办法
1329
查看次数

iOS UI测试:如何获取UIAlert的消息

我的应用程序有一个登录屏幕.如果用户按下登录按钮而未在用户名或密码字段中输入任何文本,则应用程序将显示带有错误消息的UIAlert.

我试图在UI测试中模拟这个逻辑,并想断言UIAlert正在显示正确的消息.但是,我找不到一种方法让UI Test访问Alert的message属性.这是测试记录器生成的代码:

func testLoginWithoutPasswort() {
    let app = XCUIApplication()
    let emailTextField = app.textFields["email"]
    emailTextField.tap()
    emailTextField.typeText("xxx@gmail.com")
    app.buttons["Login"].tap()
    app.alerts["Error"].collectionViews.buttons["OK"].tap()
}
Run Code Online (Sandbox Code Playgroud)

反正我是否可以提取UIAlert消息String的值,所以我可以对它进行断言?

ios xcode7 xcode-ui-testing

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

如何在Xcode中的UITests之间保持应用程序打开

我有一系列的UITests我想作为单独的测试运行,但我不想在每次测试之间重新启动应用程序.如何启动应用程序并使其保持打开状态,以便它不会在测试之间关闭和重新启动.

我尝试在init()中放置XCUIApplication().launch()但是出错了.

xcode-ui-testing

7
推荐指数
2
解决办法
2155
查看次数

从UITest中选择集合视图中的第一个单元格

有没有办法从第一个单元格的UITest中选择或触发didSelect(如果它存在于集合视图中)?

录制时使用所选单元格中的静态文本.如果使用动态内容从网络填充单元格,并且集合视图可能不包含单元格,则此测试将中断.

ios xcode-ui-testing

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

如何使用UIImagePickerController(或任何其他本机VC)正确地使用UITest应用程序

我正在尝试使用快照自动创建我的应用程序的屏幕截图,一切顺利,直到我想要浏览UIImagePickerController已设置allowsEditingtrue.

奇怪的是,在iPhone 4s,5s6s模拟器这很好,但在iPhone 6(s)Plus测试似乎无法点击"选择"(荷兰语中的"Kies")按钮裁剪视图.

我的第一次尝试在任何版本中都不起作用:

app.buttons.elementBoundByIndex(2).tap()
Run Code Online (Sandbox Code Playgroud)

并导致以下错误:

file:///%3Cunknown%3E:测试失败: - [MyAppSnapshots testExample()]失败:UI测试失败 - 无法滚动到可见(通过AX操作)按钮0x7f82d450ae30:特征:8589934593,{{327.0,613.5}, {35.0,34.0}},标签:'Kies',错误:错误-25204执行AXAction 2003

然后从这个答案中我抓住了解决方案forceTapElement,除了iPhone 6(s)Plus外,它的确可以正常工作.

app.buttons.elementBoundByIndex(2).forceTapElement()
Run Code Online (Sandbox Code Playgroud)

然后我尝试点击坐标;

let window = app.windows.elementBoundByIndex(0)
let rightBottom = window.coordinateWithNormalizedOffset(CGVectorMake(
  CGRectGetWidth(window.frame) - 20,
  CGRectGetHeight(window.frame) - 20
))
rightBottom.tap()
Run Code Online (Sandbox Code Playgroud)

但这再次无法在任何设备上运行.

那么我该如何测试这些原生接口呢?或者我应该只是添加某种切换到我的代码,以便UIImagePickerController替换为非交互式的东西.

xcode ios swift xcode-ui-testing fastlane-snapshot

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

"设置配置文件生成失败"

当我尝试运行UI测试时,Xcode 7.3.1给出了这个错误:

在此输入图像描述

案文是:

Setting up profile generation failed

Xcode could not generate profile information for bundle identifier (com.apple.test.XXXXXXXXUITests-Runner). The profile path was missing. The environment variables were valid.
Run Code Online (Sandbox Code Playgroud)

有谁知道可能导致这个或如何解决它?

xcode xcode7 xcode-ui-testing

7
推荐指数
0
解决办法
468
查看次数

在XCTest UI Testing中,如何检查按钮,标签,视图的背景颜色?

我试图验证是否可以在XCTest UI测试中获得背景颜色,我希望将背景颜色与设定值进行比较,这样我就不必依赖于图像比较

ios xctest xcode-ui-testing xctestcase

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

此 Mac 上安装的 CoreSimulator 框架版本已过时,此版本的 Xcode 不支持

在 macOS Big Sur 12.3.0、Xcode 12.5.0 上通过 cli/fastlane 运行 ui 测试时

 xcodebuild -showBuildSettings -workspace ./MyWorkspace.xcworkspace -scheme MyScheme-UITests
Run Code Online (Sandbox Code Playgroud)

xcodebuild[88311:3500544] DVTErrorPresenter:无法加载模拟器设备。

域:DVTCoreSimulatorAdditionsErrorDomain

代码:3

失败原因:此 Mac 上安装的 CoreSimulator 框架版本已过时,此版本的 Xcode 不支持。

恢复建议:请确保您已安装 Mac 软件的所有可用更新,并且您运行的是 macOS 支持的最新版本的 Xcode。

——

CoreSimulator 已过时。当前版本 (732.18.6) 比构建版本 (757.5.0) 旧。

域:DVTCoreSimulatorAdditionsErrorDomain

代码:3

——

xcodebuild[88311:3500544] iOSSimulator: [SimServiceContext sharedServiceContextForDeveloperDir:error:] 返回 nil (Error Domain=DVTCoreSimulatorAdditionsErrorDomain Code=3“CoreSimulator 已过时。

当前版本 (732.18.6) 比构建版本 (757.5.0) 旧。”

UserInfo={NSLocalizedDescription=CoreSimulator 已过时。当前版本 (732.18.6) 比构建版本 (757.5.0) 旧。})。模拟器设备支持已禁用。

需要更新什么?

它是通过点击“安装组件”修复的,但是我需要弄清楚究竟将安装什么以及是否可以通过 cli 完成

simulator ios xcode-ui-testing fastlane xcode12.5

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

在 CI 上的 UI 测试不稳定

更新:

VNC 进入构建机器(不做任何更改)以某种方式修复了这个......奇怪


语境

我们使用 Mac EC2 实例 CI 集群来运行 UI 测试。集群设置为每晚回收。这意味着新集群是在早上配置的。我们注意到测试在一天中变得越来越不稳定。

在此处输入图片说明

  • 构建 312 是早上的第一个构建。
  • 红色是失败的测试,橙色是静音测试,黄色是片状测试,灰色是未知状态
  • 提交只是触发构建的空白自动提交。测试内容相同。
  • 注意:Bluepill 配置为每台机器运行一个模拟器(无并发)

日志

片状测试或失败通常是由于“等待某些资源空闲”并达到超时,或某些网络请求完成。失败或不稳定的测试也有一个共同点,即它们通常与视频有关

这是几个示例日志

等待应用空闲

Timed out waiting for app to idle. 
The following idling resources are busy.
1. GREYAppStateTracker:
Waiting for network requests to finish. By default, EarlGrey tracks all network requests. To change this behavior, refer to GREYConfiguration.
<__NSCFLocalDataTask:0x7fcfcfd87450, URL:"https://v.myorgimg.com/videos/mc/hls/e7/01/ca/e701caebac12684056eb699f316fc411_360w.m3u8"> => Waiting for network requests to finish. By default, EarlGrey tracks all network requests. To change this behavior, refer to …
Run Code Online (Sandbox Code Playgroud)

xcode continuous-integration ios bluepill xcode-ui-testing

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