2017-06-15 5 views
0

Après avoir regardé les vidéos de 2017 WWDC Xcode et XCTest, j'ai mis à jour mes tests pour utiliser les derniers ajouts dans XCTests.Xcode 9: Comment créer des instances XCUIElement à l'aide de XCUIElementQuery?

J'ai récemment mis à jour Xcode 9 Beta, runnning OS X Sierra 10.12.4

Après cela, tous les tests où je XCUIElement() pour créer une instance d'élément, a échoué.

Exemple ligne de code: XCTAssertTrue (. XCUIElement() scrollToElement (tablesQuery.cells.staticTexts [ "vedette"]) existe.)

Ceci est l'erreur que je reçois: 'init()' n'est pas disponible: utilisez XCUIElementQuery pour créer des instances XCUIElement.

Si vous êtes curieux de savoir ce scrollToElement() est, il est une fonction personnalisée pour accéder à l'élément interrogée, si elle est pas visible dans la vue actuelle. Cela fait partie d'une extension personnalisée de XCUIElement que j'ai écrite.

Dans le cadre de la solution, pouvez-vous suggérer: Comment les instances XCUIElement devraient être créées maintenant?

Pour référence: 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) 
} 

Toute aide est appréciée!

+0

Pourquoi avez-vous besoin d'essayer de créer une instance de 'XCUIElement'? Je pense que vous devriez faire une méthode statique 'scrollToElement' à la place. – AdamPro13

+0

@ AdamPro13 Bonne idée, mais Inside 'scrollToElement' j'utilise la méthode' swipeUp() 'de XCUIElement, donc il ne peut pas être rendu statique. – nChetan

+0

Vous ne pouvez pas simplement instancier une instance de 'XCUIElement' car ils correspondent à des éléments existants dans l'interface utilisateur. Si vous créez un élément sans qu'il soit associé à l'interface utilisateur, vous ne pourrez rien faire car il ne sait rien. – AdamPro13

Répondre

0

Vous ne pouvez pas initialiser XCUIElements directement - vous devez y accéder via XCUIApplication, qui est une sous-classe de XCUIElement. Si vous appelez votre méthode de défilement à partir de XCUIApplication, cela fonctionnera.

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

Cela a fonctionné comme un charme, vous êtes mon sauveur. J'ai quelque peu manqué de remarquer que 'XCUIApplication' est une sous-classe de' XCUIElement'. Merci beaucoup! – nChetan