Ios 如何检查XCTest和XCUITest中的空文本字段

Ios 如何检查XCTest和XCUITest中的空文本字段,ios,ui-automation,xctest,xcuitest,Ios,Ui Automation,Xctest,Xcuitest,我必须使用xguitest或xtest检查是否有UITextField为空或包含任何值。我检查了很多地方,发现textField。Value可以用来查找结果。但对我来说,问题是textField.value将占位符作为值返回,因此它无法将空字段检测为空 您有两种情况需要确定文本字段是否为空。第一个-使用yourTextField.text==nil的standart bool值,第二个检查实例是否有“->”字符串。例如,当用户编写一些文本,然后将其删除时,应该发生这种情况 因此,在代码中: //

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

您有两种情况需要确定文本字段是否为空。第一个-使用
yourTextField.text==nil的standart bool值,第二个检查实例是否有
->”字符串。例如,当用户编写一些文本,然后将其删除时,应该发生这种情况

因此,在代码中:

// 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)

你的问题有解决办法。如果你不想得到占位符

  • 首先单击文本字段

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

    let pageTitle = textField.value as? String
    var titleLength = pageTitle?.characters.count
    XCTAssertTrue(titleLength==0, "Title is empty")
    

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

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,我认为您应该能够控制输入到这个文本字段中的内容。

我最近遇到了这个问题,正如@adamjansch for
UITextField
所指出的,
xguielement
将返回
占位符值,如果它被设置并且文本字段中没有文本

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

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
{
    ...
}

我补充了一个答案。请尝试让我知道您的反馈您未在titleLenght属性中检查零。@DominikBucher我正在检查字符串计数。如果count为0,则它肯定为空或nill。为什么要投否决票,亲爱的,好吧,亲爱的。由于你的答案几乎完全错误,我将告诉你错误的方面:1。对于swift 4-
字符
字符串的属性不推荐使用2。您正在比较nillable,因此当titleLenght为nil时,断言将失败(这是正确的假设)3。因此,您没有涵盖所有案例。4.value是完全没有意义的,因为它再次返回UITextField的实例,而不是实际的字符串,因此只有函数
value(对于键:)
调用不安全。由于OP从so获取占位符值以避免它,我建议先点击该字段,这样他就可以避免获取占位符文本。OP可以决定什么主意最适合他。而且,swift 4上也没有标签。OP可以在他正在工作的东西上转换成所需的api。这个答案不能工作(至少对于iOS)。iOS UI测试中的文本字段不能通过UITextField对象访问,因此属性
text
text.isEmpty
将不可用。相反,对文本字段的访问是通过XUIElement对象进行的,获取文本的唯一方法是通过
属性。但是,如果设置了主文本或占位符文本,则会填充该值,因此OP存在问题。