【问题标题】:iOS XCUITests access element by accessibilityiOS XCUITests 通过可访问性访问元素
【发布时间】:2017-05-17 12:16:01
【问题描述】:

我如何通过其可访问性标签或标识符断言按钮存在?

func testExitsButton() {
    XCTAssertTrue(app.windows.containing(.button, identifier: "Button Text").element.exists)
    XCTAssertTrue(app.buttons["Button Text"].exists)
    XCTAssertTrue(app.buttons["test"].exists) <- I want this, instead of accessing the text property I want by specific id, maybe the text property override the accessibilityLabel?
}

【问题讨论】:

    标签: ios swift xctest


    【解决方案1】:

    在您的应用程序代码中设置一个可访问性标识符,然后在您的测试中使用该标识符搜索按钮。

    // app code
    let button: UIButton!
    button.accessibilityIdentifier = "myButton"
    
    // UI test code
    func testMyButtonIsDisplayed() {
        let app = XCUIApplication()
        let button = app.buttons["myButton"]
        XCTAssertTrue(button.exists)
    }
    

    可访问性标识符的设置独立于按钮上的文本,也独立于可访问性标签。将 UI 元素的标识符作为可访问性标签 并不是最佳做法,因为 VoiceOver 用户会读取可访问性标签以向他们解释元素。

    【讨论】:

    • 谢谢!如果您没有设置任何可访问性 ID/标签,您可以通过其文本访问 UIButton 吗?
    • 可以,但这不是最佳做法,因为如果您决定更改或本地化文本,则需要进行维护。
    • so app.buttons["id"] 首先尝试访问“id”accessibilityIdentifier,如果未设置则搜索“id”文本属性?
    • 是的,我认为顺序是标识符,然后是标签,然后是文本。
    • 您可以将标识符与在“accesibilityLabel”中中继的 KIF 等框架一起使用吗?它的混乱
    【解决方案2】:

    重要提示:如果将超级视图设置为可访问,XCUITest 可能无法访问其子视图。

    您可以通过情节提要设置其可访问性来访问该元素,或者如上所述以编程方式访问该元素。当您的光标位于以前缀“test”开头的函数中时,您可以单击记录按钮,以记录 XCUITest 如何查看元素。有时需要几次清理(命令 shift k)和几分钟才能使用录制按钮。您还可以从情节提要中退出树并使用 XCUITest 函数,例如 element(boundBy: Int)、children(matching: .textField),您也可以链接它们:XCUIApplication().tables.cells. contains(.button,标识符:“id”)。之后是简单的部分,使用 .exists 返回一个布尔值。

    【讨论】:

    • 第一句话提供了非常有用的信息,并结束了长达一小时的错误搜索。
    • 谢谢!您从哪里获得重要提示的知识?它非常重要,必须包含在与 XCUItestting 相关的每一个内容中。对我来说,还帮助使用 Accessibility Inspector
    • @buguibu。反复试验和大量研究导致文章证实了这一点。
    【解决方案3】:

    添加 | "accessibilityIdentifier" 字符串测试 |在导航栏上的用户定义的运行时属性中,而不是在可访问性标签中

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,因为键盘盖住了按钮:

      app.buttons["Done"].tap()

      解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多