如何检查 UI 测试用例中 XCUI 元素的背景颜色?
How to check background color of the XCUIElement in UI test cases??
我正在处理一个问题,我需要将文本字段的背景颜色更改为白色。我想为其添加 UI 测试用例以检查 XCUIElement
(即文本字段)的背景颜色是否为白色。我搜索了它,但没有找到任何有用的答案。我想知道是否可以在 UI 测试用例中检查背景颜色。
我正在看马特的回答,但没有弄清楚。
想法?
就像评论中回复的人一样,我们不能通过 UI 测试来做到这一点,但我认为我们仍然有 2 种方法可以实现这一点:
-
import SnapshotTesting
...
func test_view_matchesSnapshot() {
let view = makeYourView()
assertSnapshot(matching: view, as: .wait(for: 1.5, on: .image))
}
单元测试:
func test_view_shouldHaveTextFieldWithExpectedBackgroundColor() throws {
let view = makeYourView()
let textFieldBackgroundColor = try XCTUnwrap(
view.textField.backgroundColor,
"textField.backgroundColor is nil"
)
let expectedTextFieldBackgroundColor = UIColor.white
XCTAssertEqual(
textFieldBackgroundColor.toHexString(),
expectedTextFieldBackgroundColor.toHexString(),
"textField doesn't have expected backgroundColor"
)
}
*Utility hex getters 用于比较两个 UI可以找到颜色
**如果您的 textField 是私有的,那么您可以使用
this great solution 我们的单元测试应该是这样的:
func test_view_shouldHaveTextFieldWithExpectedBackgroundColor() throws {
let view = makeYourView()
let textField = try XCTUnwrap(
YourViewMirror(reflecting: view).textField,
"Can't find textField property"
)
let textFieldBackgroundColor = try XCTUnwrap(
textField.backgroundColor,
"textField.backgroundColor is nil"
)
let expectedTextFieldBackgroundColor = UIColor.white
XCTAssertEqual(
textFieldBackgroundColor.toHexString(),
expectedTextFieldBackgroundColor.toHexString(),
"textField doesn't have expected backgroundColor"
)
}
哪里
final class YourViewMirror: MirrorObject {
init(reflecting yourView: YourView) {
super.init(reflecting: yourView)
}
var textField: UITextField? {
extract()
}
}
和
class MirrorObject {
let mirror: Mirror
init(reflecting: Any) {
self.mirror = Mirror(reflecting: reflecting)
}
func extract<T>(variableName: StaticString = #function) -> T? {
return mirror.descendant("\(variableName)") as? T
}
}
我正在处理一个问题,我需要将文本字段的背景颜色更改为白色。我想为其添加 UI 测试用例以检查 XCUIElement
(即文本字段)的背景颜色是否为白色。我搜索了它,但没有找到任何有用的答案。我想知道是否可以在 UI 测试用例中检查背景颜色。
我正在看马特的回答,但没有弄清楚。
想法?
就像评论中回复的人一样,我们不能通过 UI 测试来做到这一点,但我认为我们仍然有 2 种方法可以实现这一点:
-
import SnapshotTesting ... func test_view_matchesSnapshot() { let view = makeYourView() assertSnapshot(matching: view, as: .wait(for: 1.5, on: .image)) }
单元测试:
func test_view_shouldHaveTextFieldWithExpectedBackgroundColor() throws { let view = makeYourView() let textFieldBackgroundColor = try XCTUnwrap( view.textField.backgroundColor, "textField.backgroundColor is nil" ) let expectedTextFieldBackgroundColor = UIColor.white XCTAssertEqual( textFieldBackgroundColor.toHexString(), expectedTextFieldBackgroundColor.toHexString(), "textField doesn't have expected backgroundColor" ) }
*Utility hex getters 用于比较两个 UI可以找到颜色
**如果您的 textField 是私有的,那么您可以使用 this great solution 我们的单元测试应该是这样的:
func test_view_shouldHaveTextFieldWithExpectedBackgroundColor() throws {
let view = makeYourView()
let textField = try XCTUnwrap(
YourViewMirror(reflecting: view).textField,
"Can't find textField property"
)
let textFieldBackgroundColor = try XCTUnwrap(
textField.backgroundColor,
"textField.backgroundColor is nil"
)
let expectedTextFieldBackgroundColor = UIColor.white
XCTAssertEqual(
textFieldBackgroundColor.toHexString(),
expectedTextFieldBackgroundColor.toHexString(),
"textField doesn't have expected backgroundColor"
)
}
哪里
final class YourViewMirror: MirrorObject {
init(reflecting yourView: YourView) {
super.init(reflecting: yourView)
}
var textField: UITextField? {
extract()
}
}
和
class MirrorObject {
let mirror: Mirror
init(reflecting: Any) {
self.mirror = Mirror(reflecting: reflecting)
}
func extract<T>(variableName: StaticString = #function) -> T? {
return mirror.descendant("\(variableName)") as? T
}
}