如何断言文本字段为空?

时间:2018-08-21 04:35:52

标签: ios swift xcuitest

我在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, "")

inputXCUIElement,它实现了XCUIElementAttributes,因此在这里我看不到其他能解决问题的方法。

如何检查(断言)文本字段为空?

storyboard attributes inspector

编辑

经过一些进一步的研究并尝试了以下有关使用inputaccessibilityValuelabel的{​​{1}}属性的建议,我没有发现任何一种解决方案,当有文本时将为我提供文本字段的文本值,而在仅占位符可见时为我提供一个空字符串。

这似乎是(a)一个错误,或者(b)测试框架中有一个令人怀疑的设计决定,以不提供该功能。至少,XCUIElementAttributes#value的文档对我来说似乎是不够的,因为唯一的细节是:

  

值的确切类型因元素的类型而异。

仍在寻找更好的解决方案...

2 个答案:

答案 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, "")
}