【问题标题】:How to do 'page' object design in XCUITest如何在 XCUITest 中进行“页面”对象设计
【发布时间】:2018-08-23 03:46:01
【问题描述】:
我是 XCUITest 的新手。我想就如何设计“页面”(实际上更像屏幕)对象 XCUITest 获得一些建议。
是否有任何提供示例供参考的开源项目?
我正在考虑创建一个屏幕文件夹以将所有屏幕对象放在那里以保存每个屏幕的方法和定位器。创建一个测试文件夹来放置实际的测试用例。并且还创建一个 lib 文件夹以将常用方法放在那里。
我想知道两件事:1. XCUITest 如何引用不同文件夹中的文件,一个测试文件如何从 2 个不同的屏幕文件导入方法? 2.我也在考虑创建一个数据文件(像.json文件一样)。我应该将其设置为 .swift 文件吗?以及如何让我的测试调用它?
非常感谢!
【问题讨论】:
标签:
swift
automation
xcuitest
xcode9.4
【解决方案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.")
}
}