无法访问XCTest中以编程方式添加的UIView

时间:2016-12-31 23:24:33

标签: ios xcode swift3 xctest ui-testing

以下是我录制的XCTest

    let app = XCUIApplication()
    let tablesQuery = app.tables
    tablesQuery.staticTexts["Video"].tap()
    tablesQuery.staticTexts["\tWindowed"].tap()
    app.buttons["Launch"].tap()
    app.buttons["Popout Video"].tap()
    app.children(matching: .window).element(boundBy: 0).children(matching: .other).element(boundBy: 1).tap()

当我尝试运行测试时,最后一部分是:

    app.children(matching: .window).element(boundBy: 0).children(matching: .other).element(boundBy: 1).tap()

无法访问。它不会抛出任何错误,但最后一行代码不会被执行。

我尝试通过引用以下stackoverflow问题来解决问题: Xcode UI Tests can't find views that are added programatically

另外,我参考了以下Apple文档:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/iPhoneAccessibility/Making_Application_Accessible/Making_Application_Accessible.html#//apple_ref/doc/uid/TP40008785-CH102-SW2

https://developer.apple.com/reference/uikit/uiview

但所有这些似乎都没有解决问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

有问题的线条非常脆弱。每次应用程序启动时,您的应用程序的视图可能并非始终以相同的顺序显示,具体取决于竞争条件,因此记录会话中记录的内容并不一定适用于应用程序的所有启动。您可能会发现代码实际上正在运行,但没有点击您期望的元素。

要使代码不那么脆弱,请在应用代码中向UIView添加辅助功能标识符,并使用otherElements查询来查找UIView。

// app code
let view: UIView!
view.accessibilityIdentifier = "myAccessibilityIdentifier"

// UI test code
app.otherElements["myAccessibilityIdentifier"].tap()