Xcode7.3自定义tableViewCell中的披露指示器



(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,但是我尝试过的任何内容都返回了.existsaccessoryView

我试图错误地访问电池吗?或者,实际上不可能做我正在尝试的事情吗?

我测试的代码是:

    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()

最新更新