如何使用XCTest

时间:2017-01-12 13:12:38

标签: ios ui-automation xctest xcode-ui-testing

我正在为我的iOS应用实现UITests。 到目前为止,我已经能够进行一些简单的测试,但是我来到一个tableView,其中有两个部分。每个部分都有一个包含静态文本的sectionHeaderView,例如。 “第1节”和“第2节”,正常部分为头部风格。

执行app.tables.staticTexts["SECTION 1"].exists时,会返回true。这是第一部分,在视图加载时最顶部可见。

执行相同操作时,但对于“第2节”,它将返回false。此部分的sectionHeaderView在此时位于视图之外,所以我认为这是问题,但事实证明它不是.. 我尝试了app.swipeUp(),它成功地将第二部分带入了屏幕。在swipeUp之后我睡了几秒钟让视图稳定下来,并且我执行相同的检查,但它根本无法找到第二个视图。

向下滚动后,我尝试打印app.tables.staticTexts.debugDescription以查看可以找到的内容,它只显示第一部分以及我最底部的tableFooterView tableView。

在我执行app.tables.staticTexts["SECTION 2"].exists时,我可以在模拟器上看到“第2节”文本。然而,它并不存在于测试中。

为什么我的第二个sectionHeaderView对XCTest完全不可见?可能是因为我特别在这个视图上禁用了某种辅助功能 - 变量吗?我找不到任何东西..

编辑,输出:

    t =    32.25s     Find: Descendants matching type Table
    t =    32.26s     Find: Descendants matching type StaticText
    t =    32.26s     Find: Elements matching predicate '"SECTION 1" IN identifiers'
Found SECTION 1. Will scroll down to find Section 2.
    t =    32.26s     Swipe up Target Application 0x6080000bbf60
    t =    32.26s         Wait for app to idle
    t =    32.30s         Find the Target Application 0x6080000bbf60
    t =    32.30s             Snapshot accessibility hierarchy for my.bundle.identifier
    t =    33.09s             Wait for app to idle
    t =    33.14s         Synthesize event
    t =    33.42s         Wait for app to idle
Slept for 3 seconds. Have scrolled down. SECTION 2 in view now.
    t =    38.86s     Snapshot accessibility hierarchy for my.bundle.identifier
    t =    39.64s     Find: Descendants matching type Table
    t =    39.65s     Find: Descendants matching type StaticText
    t =    39.65s     Find: Elements matching predicate '"SECTION 2" IN identifiers'
    t =    39.66s     Assertion Failure: MyUITests.swift:347: XCTAssertTrue failed - SECTION 2 does not exist
    t =    39.66s     Tear Down

4 个答案:

答案 0 :(得分:5)

在代码中放置一个断点:

app.tables.staticTexts["SECTION 2"].exists

当你点击断点时,在调试面板中键入它并点击回车:

po print(XCUIApplication().debugDescription)

这将列出XCUITest可用的所有内容。在那里查找第2节的文字。很多时候,当我遇到这种情况时,我拼错了,或者应用中的文字在某处有额外的空间。使用.staticText时,必须完全匹配。

答案 1 :(得分:1)

我遇到了桌面页脚的问题。似乎他们被视为"其他"对象,而不是staticTexts,因此以下代码应该起作用:

XCTAssert(app.otherElements["SECTION 2"].exists)

感谢h.w.powers的调试提示:

po print(XCUIApplication().debugDescription)

答案 2 :(得分:0)

有几个问题,因为我还没有发表评论:(我最近做了很多UI测试,所以我学到了一点)

当您尝试在向上滑动后断言app.tables.staticTexts["SECTION 2"].exists并忽略“第1部分”标签时会发生什么?

sectionHeaderView是自定义子类吗?

我发现分配特定视图accessibilityIdentifier然后通过带有该标识符的XCUIElement代理访问它们会很有帮助。

此外,我最近发现的一点是,除非您使用UIAccessibilityContainer,否则引用超级视图的辅助功能特征可能会否定其子视图的辅助功能特征。

答案 3 :(得分:0)

只需将调试器放入测试功能,然后运行测试

enter image description here

在调试器屏幕中,只需编写po app,它将显示包含图像,静态文本等的应用程序的视图层次结构。