每次 Apple 发布新的 XCode 版本时,我的 UI 测试都会失败
Every time Apple release a new XCode version my UI tests fail
每次 Apple 发布新的 XCode 版本时,我的 UI 测试都会失败。我需要花几天时间弄清楚测试中需要更改的内容。
有什么我遗漏的吗?
示例:
let tablesQuery = app.tables
let passwordCellsQuery = tablesQuery.cells.containing(.staticText, identifier:"Password")
passwordCellsQuery.children(matching: .secureTextField).element.tap()
passwordCellsQuery.children(matching: .secureTextField).element.typeText("12345678")
let memorableDateDdMmYyyyCellsQuery = tablesQuery.cells.containing(.staticText, identifier:"Memorable Date (dd/mm/yyyy)")
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 2).tap()
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 2).typeText("1")
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 0).tap()
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 0).typeText("2")
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 1).tap()
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 1).typeText("3")
这次我得到了"Failed to synthesize event: Neither element nor any descendant has keyboard focus. Event dispatch snapshot: SecureTextField"
我害怕任何新的 XCode 版本,因为它总是破坏我所有的 UI 测试,这次是版本 11.4.1 (11E503a)。
单元测试表现良好(谢天谢地)。
你不应该坚持使用自动生成的代码。
自己写测试代码和元素描述,这样测试会更稳定。
尽量让你的代码更简单——它会更容易维护。
let table = app.tables.element
let passwordCell = table.cells["Password"]
passwordCellsQuery.tapAndType("12345678")
let dateCell = table.cells["Memorable Date (dd/mm/yyyy)"]
dateCell.secureTextFields.element(boundBy: 2).tapAndType("1")
dateCell.secureTextFields.element(boundBy: 0).tapAndType("2")
dateCell.secureTextFields.element(boundBy: 1).tapAndType("3")
extension XCUIElement {
func tapAndType(_ text: String) {
tap()
typeText(text)
}
}
每次 Apple 发布新的 XCode 版本时,我的 UI 测试都会失败。我需要花几天时间弄清楚测试中需要更改的内容。
有什么我遗漏的吗?
示例:
let tablesQuery = app.tables
let passwordCellsQuery = tablesQuery.cells.containing(.staticText, identifier:"Password")
passwordCellsQuery.children(matching: .secureTextField).element.tap()
passwordCellsQuery.children(matching: .secureTextField).element.typeText("12345678")
let memorableDateDdMmYyyyCellsQuery = tablesQuery.cells.containing(.staticText, identifier:"Memorable Date (dd/mm/yyyy)")
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 2).tap()
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 2).typeText("1")
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 0).tap()
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 0).typeText("2")
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 1).tap()
memorableDateDdMmYyyyCellsQuery.children(matching: .secureTextField).element(boundBy: 1).typeText("3")
这次我得到了"Failed to synthesize event: Neither element nor any descendant has keyboard focus. Event dispatch snapshot: SecureTextField"
我害怕任何新的 XCode 版本,因为它总是破坏我所有的 UI 测试,这次是版本 11.4.1 (11E503a)。
单元测试表现良好(谢天谢地)。
你不应该坚持使用自动生成的代码。
自己写测试代码和元素描述,这样测试会更稳定。
尽量让你的代码更简单——它会更容易维护。
let table = app.tables.element
let passwordCell = table.cells["Password"]
passwordCellsQuery.tapAndType("12345678")
let dateCell = table.cells["Memorable Date (dd/mm/yyyy)"]
dateCell.secureTextFields.element(boundBy: 2).tapAndType("1")
dateCell.secureTextFields.element(boundBy: 0).tapAndType("2")
dateCell.secureTextFields.element(boundBy: 1).tapAndType("3")
extension XCUIElement {
func tapAndType(_ text: String) {
tap()
typeText(text)
}
}