Xcode UI 测试 - 使用 addSubview 添加的 UIView 在 UI 测试中完全不可见

4

我一直在尝试使用XCode 7.3上的新UI测试,但我发现了一个问题。

问题是通过"addSubview"方法添加的视图似乎对UI测试系统完全不可见。

我有这个视图:

enter image description here

而这段UIview创建的代码:

    let container = UIView(frame: CGRectMake(0, 0, 375, 200))
    container.backgroundColor = UIColor.orangeColor()
    container.isAccessibilityElement = false
    let label = UILabel(frame: CGRectMake(0, 100, 375, 20))
    label.backgroundColor = UIColor.yellowColor()
    label.textAlignment = NSTextAlignment.Center
    label.accessibilityIdentifier = "labelIdentifier"
    label.text = "I am a label"
    container.addSubview(label)

还有这个简单的UI测试:

func testExample() {

    let final  = XCUIApplication().staticTexts.containingType(.StaticText, identifier: "labelIdentifier").element
    XCTAssertEqual(final.label, "I am a label")
}

问题是,根据我如何连接橙色视图,测试无法找到标签。如果我执行以下操作:
    self.tableView.tableHeaderView = container

测试完全没有问题,但是将其与以下内容连接起来时:
    self.tableView.addSubview(container)

触发下一个错误:

enter image description here

在论坛上查找后,我已经尝试了所有推荐的设置,例如将容器的"isAccessibilityElement"属性设置为false等,但似乎没有任何作用。

长话短说。有人尝试过使用"addSubview"方法将元素附加到其他UIView上吗?


1
我有同样的问题。只有在将容器视图中的元素添加到表格视图时才会出现。认为解决方案是从容器视图切换到单元格... - Oletha
是的,但不幸的是一些很酷的动画库利用表头来完成它们的工作,你没有其他选择... - Delfín
你为什么要将容器添加为tableView的子视图?为什么不将容器作为tableView父视图的子视图添加呢? - Zhang
2个回答

2

你好,我创建了一个包含tableView和容器的示例项目,并将容器添加到tableView中。

尝试这个例子吧 :)

app.tables.staticTexts["labelIdentifier"]

enter image description here


我已经试过了,但对我没有起作用。你在测试中使用的Xcode版本是哪个?我已经将一个测试项目上传到GitHub (GitHub project),它使用了那段代码,但测试没有通过... - Delfín
@Delfín 我的 Xcode 版本是 7.3.1,请将 let final = XCUIApplication().staticTexts["I am a label"] 更改为 let final = XCUIApplication().staticTexts["labelIdentifier"],它会正常工作 :) - Cruz
我已经测试过那个选项了@SwiftyCruz,但是我已经更新了Xcode到7.3.1版本(之前是7.3.0),为了确认我又进行了一次测试,但结果还是一样的。你确定你在测试中使用了"addSubView"方法来添加视图吗?你测试过我的GitHub仓库中的测试项目吗? - Delfín
1
我测试了你的另一个GitHub存储库,如果设置“self.tableView.tableHeaderView = container”,那么app.staticTexts [“labelIdentifier”]可以工作,但是如果设置“self.tableView.addSubview(container)”,则无法工作。所以我打印了应用程序的表格后代,然后输出是: - Cruz
输出: { 表格 0x7fa86a680b90: 特征: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}, 标签: '我是一个标签' } 这意味着如果将标签添加到表格视图中,那么表格视图就会像表格的描述一样具有该标签,因为如果再向表格视图添加一个标签文本“我是一个标签2”,则会打印“输出: { 表格 0x7f8b53092320: 特征: 8589934592, {{0.0, 0.0}, {375.0, 667.0}}, 标签: '我是一个标签2,我是一个标签' }”,如果测试一个标签“let final = app.tables.elementBoundByIndex(0),final.label等于'我是一个标签'”。 - Cruz
这就是问题所在,@SwiftyCruz。当你使用“addSubview(container)”添加标签时,标签通过其标识符无法访问,因为它更像是表格的属性而不是标签本身,这就是我提出问题的原因... 这种行为是否是一个 bug?如果不是,我该如何访问通过“addSubview”添加到表格中的标签以检查其标签值?(这就是我想通过其标识符而不是其值进行访问的原因) - Delfín

0

你尝试使用Xcode录制来获取那个视图了吗? 只需录制并按下你的视图即可

同时确保这个UILabel没有越界,"你可以使用Xcode检查"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接