2017-06-15 9 views
0

2017 WWDC XcodeとXCTestビデオを見た後、私はXCTestsに最新の追加を使用するように私のテストを更新しました。Xcodeの9:どのようにXCUIElementQueryを使用してXCUIElementインスタンスを作成するには?

私は最近、この後OS Xシエラ10.12.4

を走っ、Xcodeの9のベータ版にアップグレードし、私は要素のインスタンスを作成するために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() 'メソッドを使用しているので、静的にすることはできません。彼らはUI内の既存の要素にマップするため – nChetan

+0

あなただけXCUIElement' 'のインスタンスをインスタンス化することはできません。 UIに関連付けられていない要素を作成した場合は、何も知らないため何もできません。 – AdamPro13

答えて

0

XCUIElementを直接初期化することはできません.XCUIElementのサブクラスであるXCUIApplicationを介してXCUIElementにアクセスする必要があります。 XCUIApplicationからスクロールメソッドを呼び出すと、そのメソッドは機能します。

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

それは魅力のように働いた、あなたは私の救い主です。私は何とか 'XCUIApplication'は' XCUIElement'のサブクラスであることに気付い逃しました。どうもありがとうございます! – nChetan

関連する問題