2017-06-15 25 views
0

在觀看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

回答

0

您不能直接初始化XCUIElements - 您必須通過XCUIApplication(它是XCUIElement的子類)來訪問它們。如果您從XCUIApplication調用滾動方法,它將起作用。

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

這就像一個魅力,你是我的救世主。我不知何故錯過了'XCUIApplication'是'XCUIElement'的一個子類。非常感謝! – nChetan