如何在 XCUITest 中进行“页面”对象设计

Posted

技术标签:

【中文标题】如何在 XCUITest 中进行“页面”对象设计【英文标题】:How to do 'page' object design in XCUITest 【发布时间】:2018-08-23 03:46:01 【问题描述】:

我是 XCUITest 的新手。我想就如何设计“页面”(实际上更像屏幕)对象 XCUITest 获得一些建议。

是否有任何提供示例供参考的开源项目?

我正在考虑创建一个屏幕文件夹以将所有屏幕对象放在那里以保存每个屏幕的方法和定位器。创建一个测试文件夹来放置实际的测试用例。并且还创建一个 lib 文件夹以将常用方法放在那里。

我想知道两件事:1. XCUITest 如何引用不同文件夹中的文件,一个测试文件如何从 2 个不同的屏幕文件导入方法? 2.我也在考虑创建一个数据文件(像.json文件一样)。我应该将其设置为 .swift 文件吗?以及如何让我的测试调用它?

非常感谢!

【问题讨论】:

【参考方案1】:
    您无需从位于同一目标的不同文件夹中导入文件。无需导入即可直接使用。 参考Reading in a JSON File Using Swift 读取json文件。

用于页面对象设计

AppNameUITests/Screens/Screen1.swift

class Screen1 
    var app: XCUIApplication

    init(app: XCUIApplication) 
        self.app = app
    

    var element1: XCUIElement 
        return app.buttons.firstMatch
    

    var element2: [XCUIElement] 
        return app.textFields.allElementsBoundByIndex
    

    func method1() -> Int 
        element1.click()
        return element2.count
    

AppNameUITests/Tests/TestSuite1.swift

class TestSuite1: XCTestCase 

    override func setUp() 
        // launch application and pre-conditions for the test case
    

    override func tearDown() 
        // clean up steps and terminate the application
    

    func testMethod1() 
        let app = XCUIApplication()
        let screen1Obj = Screen1(app: app)

        XCTAssertTrue(screen1Obj.method1() == 5, "Test failed.")
    

【讨论】:

以上是关于如何在 XCUITest 中进行“页面”对象设计的主要内容,如果未能解决你的问题,请参考以下文章

将环境变量传递给 XCUITest

如何在 XCUITest 中使用 perform(withKeyModifier:block:) 函数执行多选

如何从 XCUITest 读取 Json 文件?

如何使用 XCUITest 检查应用程序中添加的启动图像? [关闭]

如何暂停 XCUITest 以进行手动模拟器操作?

如何使用 XCUITest 查询 SwiftUI 表格单元格