我在UI上有一个空文本字段,尽管它在情节提要中设置了占位符文本(其值为foo
)。在我的UI测试中,我试图检查其文本值是否开始为空,但是当我查询它的值时,它似乎是在给我占位符值:
func testTextFieldInitiallyEmpty {
let input = XCUIApplication().textFields["My Text Field"]
XCTAssertEqual(input.value as! String, "")
}
由于测试失败并显示以下消息:
XCTAssertEqual失败:(“ foo”)不等于(“”)
当然,foo
是占位符值,但不是该文本字段的文本值。如果我写了,我会期望该错误消息:
XCTAssertEqual(input.placeholderValue as! String, "")
input
是XCUIElement
,它实现了XCUIElementAttributes
,因此在这里我看不到其他能解决问题的方法。
如何检查(断言)文本字段为空?
经过一些进一步的研究并尝试了以下有关使用input
,accessibilityValue
和label
的{{1}}属性的建议,我没有发现任何一种解决方案,当有文本时将为我提供文本字段的文本值,而在仅占位符可见时为我提供一个空字符串。
这似乎是(a)一个错误,或者(b)测试框架中有一个令人怀疑的设计决定,以不提供该功能。至少,XCUIElementAttributes#value的文档对我来说似乎是不够的,因为唯一的细节是:
值的确切类型因元素的类型而异。
仍在寻找更好的解决方案...
答案 0 :(得分:0)
除了检查空白字符串之外,您还可以与XCUIElementAttributes的placeholderValue变量进行比较
extension XCUIElement {
func noTextEntered() -> Bool {
return self.value as? String != "" && self.value as? String != placeholderValue
}
}
然后您可以运行XCAssert(input.noTextEntered(), "Unexpected text entered into field")
只需确保您的占位符不是用户会输入的内容即可。这样,您就不必对占位符值进行硬编码检查
答案 1 :(得分:-1)
尝试使用accessibilityValue
的{{1}}属性。
input
如果命令+单击该属性,则可以看到以下内容。
func testTextFieldInitiallyEmpty {
let input = XCUIApplication().textFields["My Text Field"]
XCTAssertEqual(input.accessibilityValue, "")
}