swift2 UI测试Xcode 7-无法访问子视图中的元素

enyaitl3  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(229)

我尝试访问子视图中的元素,但发现无法执行此操作。
层次结构为:
视图控制器:

  • 检视
  • 临时视图
  • 用户输入视图
  • 压缩代码已输入

我想访问zipCodeEntered文本字段。我在它上面有一个名为“zipCodeEntered”的可访问性标签。
当我尝试记录自动化时,它只注册了超级视图“userEnterView”,而不是我可以点击的实际文本字段。
我打印“app.otherElements[SUPER_VIEW_NAME].debugDescription”以查看层次结构中有哪些元素,但它没有打印任何元素。
关于为什么我无法访问这些元素/我如何才能访问它们,您有什么想法吗?x1c 0d1x

jbose2ul

jbose2ul1#

子视图不可访问,因为父视图不是容器视图。从辅助功能编程指南的Making Your iOS App Accessible部分:
从可访问性的Angular 来看,自定义视图可以是单独的视图,也可以是容器视图。单独的视图不包含任何其他需要可访问的视图。
另一方面,容器视图包含用户可以与之交互的其他元素。
要使子视图可访问,父视图应该通过从-isAccessibilityElement返回NO并实现UIAccessibilityContainer协议的方法来告诉UIAccessibility它是一个可访问性容器。

fkaflof6

fkaflof62#

修复它的事情是为我检查√的“可访问性”框启用在界面生成器。

如果无法在IB中工作,请尝试将视图的isAccessibilityElement属性设置为true。
希望这对你有帮助!

ddarikpa

ddarikpa3#

我在UITableView中也遇到了这个问题。我的单元格有一个containerView(UIView),它有子视图(TextView,UIButton...)和一个带有单元格的collectionView。
我尝试了可接受的答案,但它不起作用。(UI记录器或手动代码无法识别我的子元素)。但有时我发现,当我触发某个东西来刷新表时,UITest突然识别出了我的子元素。

因此,现在我知道如果UITest找不到我的子视图,我就调用tableView.reloadData来刷新视图,然后所有问题都解决了。

不管怎么说,这只是一个变通办法,希望苹果能尽快修复。

相关问题