【问题标题】:Xcode 9: How to create XCUIElement instances using XCUIElementQuery?Xcode 9:如何使用 XCUIElementQuery 创建 XCUIElement 实例?
【发布时间】:2017-06-15 22:53:12
【问题描述】:

观看 2017 年 WWDC Xcode 和 XCTest 视频后,我更新了我的测试以使用 XCTests 中的最新添加。

我最近升级到 Xcode 9 Beta,运行 OS X Sierra 10.12.4

在此之后,我使用XCUIElement() 创建元素实例的所有测试都失败了。

示例代码行: XCTAssertTrue(XCUIElement().scrollToElement(tablesQuery.cells.staticTexts["Featured"]).exists)

这是我得到的错误: 'init()' 不可用:使用 XCUIElementQuery 创建 XCUIElement 实例。

如果你好奇 scrollToElement() 是什么,它是一个自定义函数,可以滚动到正在查询的元素,如果它在当前视图中不可见。 它是我编写的 XCUIElement 自定义扩展的一部分。

作为解决方案的一部分,您能否建议: 现在预计如何创建 XCUIElement 实例?

供参考: scrollToElement()

open func scrollToElement(_ element: XCUIElement) -> XCUIElement {
    while !element.visible() {
        swipeUp()
    }
    return element
}

open func visible() -> Bool {
    guard self.exists && !self.frame.isEmpty else { return false }
    return XCUIApplication().windows.element(boundBy: 0).frame.contains(self.frame)
}

感谢任何帮助!

【问题讨论】:

  • 为什么需要尝试创建XCUIElement 的实例呢?我认为您应该将 scrollToElement 改为静态方法。
  • @AdamPro13 好主意,但在 scrollToElement 内部我使用的是 XCUIElement 中的 swipeUp() 方法,因此不能将其设为静态。
  • 您不能只实例化XCUIElement 的实例,因为它们映射到 UI 中的现有元素。如果您创建的元素没有与 UI 关联,您将无法对它执行任何操作,因为它什么都不知道。
  • 谢谢亚当!我找到了一个解决方案,改用XCUIApplication

标签: ios xctest xcode-ui-testing xcode9-beta xcode9


【解决方案1】:

您不能直接初始化 XCUIElements - 您必须通过 XCUIApplication 访问它们,它是 XCUIElement 的子类。如果您从 XCUIApplication 调用滚动方法,它将起作用。

let app = XCUIApplication()
XCTAssertTrue(app.scrollToElement(app.tables.cells.staticTexts["Featured"]).exists)

【讨论】:

  • 这就像一个魅力,你是我的救星。我不知何故错过了注意到XCUIApplicationXCUIElement 的子类。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
相关资源
最近更新 更多