KIF无法在UITableViewCell中点击UIButton,如果它是UITableView的唯一一个

时间:2015-02-19 19:02:06

标签: ios uitableview uibutton uiaccessibility kif

如果该单元格是表格中唯一的单元格,我无法自动点击UIButton内嵌UITableViewCell。这是在使用KIF进行UI自动化的背景下。

这是我的相关电话:

[tester tapViewWithAccessibilityLabel: @"LABEL"
                               traits: UIAccessibilityTraitButton];
                               // trait only specified for 2nd case below

以下是我观察的内容:

  • 如果我在UITableViewCell KIF KIFUITestActor - waitForAccessibilityElement:view:withLabel:traits:tappable:上放置辅助功能标签,则返回UITableView,而不是单元格。不知怎的,这个表似乎继承了它唯一的子可访问性标签,让KIF在递归搜索时首先遇到它。

  • 如果我将可访问性标签放在UIButton上,KIF会找到它,但确定它是不可点击的(即UIView-KIFAdditions -tappablePointInRect:返回NO),可能是因为它主要是因为它按钮标签的细字体线之间是透明的(而是点击转到UITableViewCellContentView)。

解决方法可能是通过NSIndexPath点击行,但也许还有更好的方法可以克服我所面临的障碍。那么我如何通过拨打tapView...来指示KIF点击这样的按钮?

3 个答案:

答案 0 :(得分:0)

如果要在代码中创建单元格,请确保将按钮添加到cell.contentView。

如果要从xib加载单元格,请尝试将contentView发送到视图层次结构的后面(我还没有找到任何缺点):

[self sendSubviewToBack:self.contentView];

答案 1 :(得分:-1)

这只是为了确认此解决方法适用:

[tester tapRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0] 
inTableViewWithAccessibilityIdentifier: @"IDENTIFIER"];

答案 2 :(得分:-1)

“好”解决方案应该是这样的:

UITableViewCell *cell = [tester waitForCellAtIndexPath:indexPath inTableViewWithAccessibilityIdentifier:tableAccessibilityIdentifier];
UIAccessibilityElement *element = [cell accessibilityElementWithLabel:accessibilityLabel traits:UIAccessibilityTraitButton];
[tester tapAccessibilityElement:element inView:cell];

不幸的是,它没有按预期工作。有时elementUIAccessibilityElementMockView并且在步骤3中点击它导致只是点击底层单元格。当然结果不会像预期的那样。

我已经设法通过做更多的事情来解决这个问题:

MyCustomCellClass *cell = (MyCustomCellClass *)[self waitForCellAtIndexPath:indexPath inTableViewWithAccessibilityIdentifier:tableAccessibilityIdentifier];
[cell.buttonOutlet sendActionsForControlEvents:UIControlEventTouchUpInside];

请注意,这意味着

  1. 更少依赖用户界面互动
  2. 拥有自定义类
  3. 有按钮的插座
  4. 但是嘿,KIF不受Apple的支持,所以有时,你知道,它会破坏:)。