(xcode 7.3.1,ios9.3,swift)
我正在努力在我的作业中设置一个UI测试,这似乎是标准的和常见的用例。
我有一个子类的UitableViewCell,其中包含一个不填充整个单元格且具有披露指标集的文本字段。用户可以通过点击Textfield将数据输入到TextField,但是如果他们在Textfield外面点击,但仍在单元格中,我的应用程序会遇到另一个视图。该项目正常工作,儿童视图从单元格的文本字段接收了正确的数据。
我的主详细信息应用程序在主视图和详细信息上都具有效率。我的UI测试选择主视图中的第一个单元格,等待DV,然后在详细信息视图中选择第二个单元格,该单元格是根据我的早期描述配置的。
我正在模拟第二个单元格使用
tablesQuery.cells.elementBoundByIndex(1).tap()
但是,模拟器将其解释为Textfield中的水龙头,因此不会发生。我已经阅读了Swiftycruz的问题和给定的答案,但是他的用例有所不同,因为我没有使用Detail Disclosure
,而且所接受的答案也不会转化为我的情况。在遵循 ferunandu 的说明中,我尝试在单元格上设置可访问性标签和标识符,以及accessoryView?.accessibilityIdentifier
的其他字符串。尽管UI测试仍然不起作用,但是 ferunandu 的摘要确实将披露指标从>
更改为蓝色框。
使用断点,我一直在调试窗口中查询app
对象,试图找到正确的控件,但无济于事。我能够使用索引和标识符找到Textfield,但是我尝试过的任何内容都返回了.exists
的accessoryView
。
我试图错误地访问电池吗?或者,实际上不可能做我正在尝试的事情吗?
我测试的代码是:
XCUIDevice.sharedDevice().orientation = .Portrait
let app = XCUIApplication()
wait()
let tablesQuery = app.tables
tablesQuery.cells.elementBoundByIndex(0).tap()
wait()
tablesQuery.cells.elementBoundByIndex(1).tap()
我在这里不正确理解什么?任何建议都将不胜感激。
(我知道我本可以在儿童视图上完成的数据输入使用标准的uiatevieviewcell,但是我不想更改应用程序的设计以容纳Xctest,似乎有点倒。)
我有一个子类的UitaiteViewCell,其中包含一个不填充整个单元的文本字段...
我正在使用
对第二个单元格上的点击tablesQuery.cells.elementBoundByIndex(1).tap()
但是,模拟器将其解释为文本字段中的水龙头,因此不会发生。
听起来您对桌面视图单元格的点击被文本字段拦截。当UI测试点击桌上电视单元格时,水龙头将位于UI元素框架的中心。
要从单元格的中心取代TAP位置,请使用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()