(Xcode 7.3.1,iOS9.3,Swift)
我很难在我的作业中设置一个UI测试,这似乎是一个相当标准和常见的用例。
我有一个子类UITableViewCell,它包含一个不填充整个单元格的textField,并且具有显示指示符集。用户可以通过点击textField将数据输入到textField中,但是如果他们在textField之外点击,但仍然在单元格中,我的应用程序就会切换到另一个视图。该项目运行良好,子视图从单元格的textField接收正确的数据。
我的主细节应用程序在主视图和细节视图上都有UITableViews。我的UI测试选择主视图中的第一个单元格,等待DV,然后在详细视图中选择第二个单元格,这是根据我先前的描述配置的。
我正在模拟第二个单元上的点击
tablesQuery.cells.elementBoundByIndex(1).tap()但是,模拟器将其解释为textField中的一个抽头,因此不会发生segue。我读过SwiftyCruz的问题和给出的答案,但他的用例有点不同,因为我没有使用Detail Disclosure,而且接受的答案也不能解释我的情况。在按照ferunandu解释的过程中,我尝试在单元格上设置可访问性标签和标识符,以及为accessoryView?.accessibilityIdentifier设置一个不同的字符串。尽管UI测试仍然不起作用,但ferunandu的代码片段确实将泄密指示符从>更改为蓝色框。
使用断点,我一直在调试窗口中查询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的设计,似乎有点倒退。)
发布于 2016-06-21 14:59:35
我有一个子类的UITableViewCell,它包含一个不填充整个单元格的textField . 我正在模拟对第二个细胞的敲击 tablesQuery.cells.elementBoundByIndex(1).tap() 但是,模拟器将其解释为textField中的一个抽头,因此不会发生segue。
听起来,您在表视图单元格上的点击正在被文本字段截获。当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()https://stackoverflow.com/questions/37925111
复制相似问题