3

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

这是我的相关电话:

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

这是我正在观察的:

  • 如果我将可访问性标签放在UITableViewCellKIF 上,KIFUITestActor - waitForAccessibilityElement:view:withLabel:traits:tappable:返回的是UITableView,而不是单元格。不知何故,该表似乎继承了其唯一孩子的可访问性标签,并让 KIF 在其递归搜索期间首先遇到它。

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

一种解决方法可能是通过它来敲击该行,NSIndexPath但也许还有更好的方法来克服我所面临的所描述的障碍。那么我怎么能指示 KIF 通过调用来点击这样的按钮tapView...呢?

4

3 回答 3

0

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

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

[self sendSubviewToBack:self.contentView];
于 2016-06-13T10:52:18.180 回答
-1

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

[tester tapRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0] 
inTableViewWithAccessibilityIdentifier: @"IDENTIFIER"];
于 2015-02-19T19:31:16.770 回答
-1

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

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

不幸的是,它没有按预期工作。有时element是 aUIAccessibilityElementMockView并在步骤 3 中点击它意味着只点击底层单元格。结果自然不会像预期的那样。

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

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

请注意,这意味着

  1. 减少对 UI 交互的依赖
  2. 有一个自定义类
  3. 有一个按钮的出口

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

于 2015-07-29T14:37:04.450 回答