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

KIF cannot tap UIButton inside UITableViewCell if it's its UITableView's only one

我在自动点击嵌入在 UITableViewCell 中的 UIButton 时遇到问题,如果该单元格是 table 的唯一单元格。这是在使用 KIF UI 自动化的上下文中。

这是我的相关电话:

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

这是我观察到的:

解决方法可能是点击 NSIndexPath 行,但也许还有更好的方法来克服我所面临的上述障碍。那么我如何指示 KIF 通过调用 tapView...?

来点击这样的按钮

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

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

"good" 解决方案应该是这样的:

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. 较少依赖UI互动
  2. 有一个习惯class
  3. 有一个按钮的出口

但是,嘿,KIF 不受 Apple 支持,所以它有时会中断 :)

如果您在代码中制作单元格,请确保您的按钮已添加到 cell.contentView。

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

[self sendSubviewToBack:self.contentView];