1

我必须使用or检查是否有任何UITextField为空或包含任何值。我检查了很多地方,发现可以用来找出结果。但对我来说,问题是将占位符作为值返回,因此它无法将空字段检测为空。XCUITestXCTesttextField.ValuetextField.value

4

4 回答 4

0

有一个应该有效的解决方案(除了在一种情况下*)。XCUIElement 有一个属性placeholderValue,它应该包含文本字段的占位符文本。所以试试这个:

let textfield = XCUIApplication().textFields["textFieldIdentifier"]

if let textFieldText = textField.value as? String,
   textFieldText.isEmpty == false,
   textFieldText != textField.placeholderValue {
    // Do the thing that requires the text field *not* to be empty
}

* 这不起作用的一种情况是,如果在文本字段中输入的文本与占位符的文本相同。然后我们在Failsville。

但是,由于这是一个 UITest,我认为您应该对输入此文本字段的内容有所控制。

于 2020-04-28T16:10:18.817 回答
0

您有两种情况可以确定文本字段是否为空。第一个 - 使用标准 bool 值yourTextField.text == nil和第二个检查实例是否有字符串""-> 这应该例如在用户编写一些文本然后删除它时发生......

所以在代码中:

// The second condition will occur only if the text is not nil, so 
// it is okay to unwrap it like it.
 XCTAssertTrue(textField.text == nil || textField.text!.isEmpty)
于 2017-12-21T13:58:28.090 回答
0

UITextField我最近遇到了这个问题,正如@adamjansch所指出的,如果它被设置并且文本字段中没有文本,XCUIElement则将返回该值。placeholder

鉴于此,我最终做了这样的事情:

let query = app.scrollViews.otherElements
let textField = query.textFields["textFieldIdentifier"]

if textField.value != nil,
   let aValue = textField.value as? String,
   let placeholderValue = textField.placeholderValue,
   aValue != placeholderValue

{
   // Do something with the text field; it has a value
   // so perhaps it needs to be cleared before a new
   // value is input.
   textField.buttons["Clear text"].tap()
}
else
{
    ...
}
于 2021-02-19T20:28:18.697 回答
-1

您的问题有一个解决方法。如果您不想获取占位符

  • 首先点击文本框

    textField.tap()
    
  • 从 textfield 元素中获取值

    let pageTitle = textField.value as? String
    var titleLength = pageTitle?.characters.count
    XCTAssertTrue(titleLength==0, "Title is empty")
    
于 2017-12-22T08:38:41.053 回答