使用机器人模式的 XCUITest 无法打印错误行
XCUITest using Robot pattern can't print the erroneous line
我正在尝试重构我的项目的 UI 测试以使用机器人模式。但它似乎无法显示代码中的哪一行是错误的。这是屏幕截图:
如您所见,testShowAppHealthAndBackWithoutRobot()
可以用红线显示错误,而 testShowAppHealthAndBack()
不会。
以下是机器人的代码:
class Robot {
let app: XCUIApplication
init(app: XCUIApplication) {
self.app = app
}
func tap(_ element: XCUIElement, timeout: TimeInterval = 5) {
guard assertExists(element, timeout: timeout), element.isHittable else {
XCTFail("Element: \(element) is not hittable!")
return
}
element.tap()
}
func assertExists(_ element: XCUIElement, timeout: TimeInterval = 5) -> Bool {
guard element.waitForExistence(timeout: timeout) else {
XCTFail("Element: \(element) does not exist!")
return false
}
return true
}
func assertExists(_ elements: [XCUIElement], timeout: TimeInterval = 5) {
for _ in 0 ... Int(timeout) {
if elements.filter({ [=10=].exists == false }).isEmpty {
return
}
Thread.sleep(forTimeInterval: 1)
}
XCTFail("Elements: \(elements) do not exist!")
}
}
class MainPageRobot: Robot {
lazy var mainTitleText = app.staticTexts["My App"]
lazy var appHealthButton = app.buttons["App Health"]
func isInMainPageViewController() -> Self {
_ = assertExists(mainTitleText)
return self
}
func tapAppHealthButton() -> Self {
tap(appHealthButton)
return self
}
}
class AppHealthRobot: Robot {
lazy var navigationTitle = app.navigationBars["App Health"].staticTexts["App Health"]
lazy var backButton = app.staticTexts["Red this shit up"]
func isInAppHealthViewController() -> Self {
assertExists(navigationTitle, line: line)
return self
}
func tapBackButton() -> Self {
tap(backButton)
return self
}
}
所以我的问题是,如何使用机器人模式显示测试函数中的错误行?谢谢
使用 XCTAssert
(XCTFail
) 调用添加实用程序函数时,您应该传递 file
和 line
参数。
这是这种行为的一个例子。
func verify(something: Bool, file: StaticString = #file, line: UInt = #line) {
XCTAssertTrue(something, file: file, line: line)
}
func testVerify() {
verify(false) // This line would be marked as failed
}
我正在尝试重构我的项目的 UI 测试以使用机器人模式。但它似乎无法显示代码中的哪一行是错误的。这是屏幕截图:
如您所见,testShowAppHealthAndBackWithoutRobot()
可以用红线显示错误,而 testShowAppHealthAndBack()
不会。
以下是机器人的代码:
class Robot {
let app: XCUIApplication
init(app: XCUIApplication) {
self.app = app
}
func tap(_ element: XCUIElement, timeout: TimeInterval = 5) {
guard assertExists(element, timeout: timeout), element.isHittable else {
XCTFail("Element: \(element) is not hittable!")
return
}
element.tap()
}
func assertExists(_ element: XCUIElement, timeout: TimeInterval = 5) -> Bool {
guard element.waitForExistence(timeout: timeout) else {
XCTFail("Element: \(element) does not exist!")
return false
}
return true
}
func assertExists(_ elements: [XCUIElement], timeout: TimeInterval = 5) {
for _ in 0 ... Int(timeout) {
if elements.filter({ [=10=].exists == false }).isEmpty {
return
}
Thread.sleep(forTimeInterval: 1)
}
XCTFail("Elements: \(elements) do not exist!")
}
}
class MainPageRobot: Robot {
lazy var mainTitleText = app.staticTexts["My App"]
lazy var appHealthButton = app.buttons["App Health"]
func isInMainPageViewController() -> Self {
_ = assertExists(mainTitleText)
return self
}
func tapAppHealthButton() -> Self {
tap(appHealthButton)
return self
}
}
class AppHealthRobot: Robot {
lazy var navigationTitle = app.navigationBars["App Health"].staticTexts["App Health"]
lazy var backButton = app.staticTexts["Red this shit up"]
func isInAppHealthViewController() -> Self {
assertExists(navigationTitle, line: line)
return self
}
func tapBackButton() -> Self {
tap(backButton)
return self
}
}
所以我的问题是,如何使用机器人模式显示测试函数中的错误行?谢谢
使用 XCTAssert
(XCTFail
) 调用添加实用程序函数时,您应该传递 file
和 line
参数。
这是这种行为的一个例子。
func verify(something: Bool, file: StaticString = #file, line: UInt = #line) {
XCTAssertTrue(something, file: file, line: line)
}
func testVerify() {
verify(false) // This line would be marked as failed
}