【发布时间】: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,这似乎有点倒退。 )
【问题讨论】: