2016-10-20 6 views
0

Как создать быстрый файл, определяющий кнопки или текстовые поля в XCTest? У меня есть файл UITest. Я хочу определить элементы в UITest в другом быстром файле, но это ошибка. Это то, что я ищу:Как создать быстрый файл, определяющий кнопки или textFields в XCTest?

import Foundation 

class HomeVC{ 

    let app = XCUIApplication() 
    let tabBarsQuery = app.tabBars 
    let tablesQuery = app.tables 

    let btn = app.buttons["a"] 
    let btn2 = app.buttons.element(boundBy: 0) 
    let txt = app.tables.staticTexts["a"] 

} 

Я хочу использовать эти элементы в моем UI Test:

import XCTest 

class UITests: XCTestCase { 

    let config = TestConfig() 
    let log = Log() 

    override func setUp() { 
     super.setUp() 

     // Put setup code here. This method is called before the invocation of each test method in the class. 

     // In UI tests it is usually best to stop immediately when a failure occurs. 
     continueAfterFailure = false 
     // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 
     XCUIApplication().launch() 

     // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 
    } 

    override func tearDown() { 
     // Put teardown code here. This method is called after the invocation of each test method in the class. 
     super.tearDown() 

    } 
    func testExample() { 

    //Call HomeVC 
    let homeVC = HomeVC() 
    homeVC.btn.tap() 
    homeVC.btn2.tap() 
    homeVC.txt.tap() 
} 

Есть ли какие-либо решения доступны? пожалуйста, направляйте меня через правильное решение. Спасибо всем!

ответ

0

В вашем текущем коде те константы, которые являются XCUIElement s, а не XCUIElementQuery s, решаются немедленно при инициализации класса HomeVC. Если кнопки не все присутствуют при инициализации HomeVC, свойства не будут пригодны для использования.

может сделать свойства ленивыми, что означает, что они будут разрешены при первом использовании, а не при инициализации объекта, но это не расширяемая модель.

должен использовать объектную модель страницы, где вы создаете класс для каждой дискретной страницы. Этот класс может инкапсулировать все пути и идентификаторы в разные элементы и выставлять элементы в качестве вычисленных свойств. Это означает, что запросы элементов будут разрешаться при каждом обращении к ним, используя в то время самую современную иерархию представлений.

Дополнительная информация о реализации объектной модели страницы с XCTest в Swift в моем блоге: http://qualitytesting.tumblr.com/post/144462182209/xctest-and-the-page-object-model

 Смежные вопросы

  • Нет связанных вопросов^_^