Xcode 7.3 XCTest of Disclosure Indicator in a custom TableViewCell
Posted
技术标签:
【中文标题】Xcode 7.3 XCTest of Disclosure Indicator in a custom TableViewCell【英文标题】:Xcode7.3 UITest of Disclosure Indicator in a custom TableViewCell 【发布时间】:2016-06-20 14:29:22 【问题描述】:(Xcode 7.3.1、ios9.3、Swift)
我正在努力在我的作业中设置一个 UI 测试,这似乎是一个相当标准和常见的用例。
我有一个子类 UITableViewCell,其中包含一个不填充整个单元格的 textField 并且设置了 Disclosure Indicator。用户可以通过点击将数据输入到 textField 中,但如果他们点击 textField 外部但仍在单元格中,我的应用程序会转到另一个视图。该项目工作正常,子视图从单元格的 textField 接收正确的数据。
我的 Master-Detail 应用在 Master 和 Detail 视图上都有 UITableView。我的 UI 测试选择 Master View 中的第一个单元格,稍等 DV 后选择详细视图中的第二个单元格,根据我之前的描述进行配置。
我正在使用
模拟对第二个 单元格 的点击tablesQuery.cells.elementBoundByIndex(1).tap()
但是,模拟器将其解释为在 textField 中的点击,因此不会发生 segue。我已经阅读了SwiftyCruz 的问题和给出的答案,但他的用例有点不同,因为我没有使用Detail Disclosure
,所以接受的答案也不能转化为我的情况。在下面的 ferunandu 解释中,我尝试在单元格上设置辅助功能标签和标识符,以及为accessoryView?.accessibilityIdentifier
设置不同的字符串。虽然 UI 测试仍然不起作用,但 ferunandu 的 sn-p 确实将披露指示符从 >
更改为蓝色框。
使用断点,我一直在调试窗口中查询app
对象,试图找到正确的控件,但无济于事。我可以使用索引和标识符找到 textField,但我尝试过的任何方法都没有为 accessoryView
返回 .exists
true。
我是否尝试错误地访问单元格?或者,实际上不可能做我正在尝试的事情吗?
我的测试代码是:
XCUIDevice.sharedDevice().orientation = .Portrait
let app = XCUIApplication()
wait()
let tablesQuery = app.tables
tablesQuery.cells.elementBoundByIndex(0).tap()
wait()
tablesQuery.cells.elementBoundByIndex(1).tap()
我在这里没有正确理解什么?任何建议将不胜感激。
(我知道我可以使用标准 UITableViewCell 并在子视图上完成数据输入,但我不想更改我的应用程序的设计以适应 XCTest,这似乎有点倒退。 )
【问题讨论】:
【参考方案1】:我有一个子类 UITableViewCell,其中包含一个不会填充整个单元格的 textField...
我正在使用模拟点击第二个单元格
tablesQuery.cells.elementBoundByIndex(1).tap()
但是,模拟器将其解释为在 textField 中的点击,因此不会发生转场。
听起来您在表格视图单元格上的点击被文本字段拦截了。当 UI 测试点击表格视图单元格时,点击将位于 UI 元素框架的中心。
要从单元格中心偏移点击位置,请使用coordinate(withNormalizedOffset:)
并直接点击坐标而不是元素。
let cell = app.tables.cells.elementBoundByIndex(0)
// Retrieves coordinate that is 50% of the way along the cell
// and 20% of the way down the cell - adjust these values to
// find the right values to avoid tapping the text field area
// of the cell
let cellCoordinateForTap = cell.coordinateWithNormalizedOffset(CGVector(dx: 0.5, dy: 0.2))
cellCoordinateForTap.tap()
【讨论】:
以上是关于Xcode 7.3 XCTest of Disclosure Indicator in a custom TableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
XCTest/XCTest.h 文件未找到 XCode 5.1.1 iOS7
iOS:xcode 5,将项目从 xctest 迁移到 senTestingKit