【问题标题】:Xcode 7 UI test loop through all switchesXcode 7 UI 测试循环通过所有开关
【发布时间】:2015-11-16 09:33:08
【问题描述】:

是否有可能测试 app.tables.switches 字典中存在的所有开关。当我记录测试时,该行会添加一个字符串作为键,例如:

app.tables.switches["Kantoor, kntr"].tap()

但我想使用 for 循环遍历所有开关(代码不起作用):

for index in 0...app.tables.switches.count {
    XCTAssertTrue(app.tables.switches[index].value, "")
}

这是在我单击“全部禁用”按钮后验证每行的所有开关是否启用/禁用。

【问题讨论】:

  • for `switch` in app.tables.switches { XCTAssertTrue(`switch`.value, "") }

标签: xcode swift ios9 ui-testing


【解决方案1】:

如果您要获取字典中的值,只需使用 values 属性:

let dict = [1: true, 2: false, 3: true]

dict.values // [false, true, true]

如果您想使用 for 循环检查字典中的偶数值是否为 true,您可以这样做:

for val in dict.values {
  XCTAssertTrue(val)
}

为了提供更多信息,您可以同时遍历键和值,并使用键作为错误消息,以防收到false:

let dict = ["a": true, "b": false, "c": true]

for (key,val) in dict {
  XCTAssertTrue(val, key)
}

或者,使用contains 方法,您可以做到这一点:

XCTAssertFalse(dict.values.contains(!))

这基本上测试字典确实 not 包含 not true 的值。

【讨论】:

  • 是的,这正是我在实施单元测试时会做的事情。但是在这种情况下我只想测试界面的UI部分。
  • 您的switches 字典是字符串和布尔字典吗?即,它的类型是[String:Bool]?
  • 如您所见,我可以使用它们的描述来调用开关,但我宁愿将字典描述为 [String:AnyObject] 因为当我尝试将 app.tables.switches 打印为变量时我的调试器告诉我类型是 XCUIElementQuery。
【解决方案2】:

我终于找到了解决方案,它比我预期的要简单,但使用了错误的方法。此修复是使用以下命令:

let firstSwitch = app.tables.switches.elementBoundByIndex(0) 

【讨论】:

  • 这不是你在问题中问的。
  • “用for循环遍历所有开关”这就是我问的。
  • 您需要更改标题以及问题中出现的主要请求以反映您真正想要的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多