Xcode 9:如何使用XCUIElementQuery创建XCUIElement实例?

问题描述:

在观看2017年WWDC Xcode和XCTest视频之后,我更新了测试以使用XCTests中的最新附加内容。Xcode 9:如何使用XCUIElementQuery创建XCUIElement实例?

我最近升级到Xcode的9 Beta版,捉迷藏OS X塞拉利昂10.12.4

在此之后,我曾经XCUIElement()来创建一个元素实例的所有测试,失败了。

实施例的代码行: XCTAssertTrue(XCUIElement()scrollToElement(tablesQuery.cells.staticTexts [ “精选”])的存在。)

这是我的错误: '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) 
} 

任何帮助表示赞赏!

+0

为什么你需要尝试创建'XCUIElement'的实例呢?我认为你应该使'scrollToElement'成为一种静态方法。 – AdamPro13

+0

@ AdamPro13好主意,但在'scrollToElement'里面我使用了XCUIElement中的'swipeUp()'方法,因此它不能变为静态的。 – nChetan

+0

您不能仅实例化一个'XCUIElement'实例,因为它们映射到UI中的现有元素。如果你创建了一个没有与UI关联的元素,你将无法对它做任何事情,因为它什么都不知道。 – AdamPro13

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

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

这就像一个魅力,你是我的救世主。我不知何故错过了'XCUIApplication'是'XCUIElement'的一个子类。非常感谢! – nChetan