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 forUITextField
所指出的,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存在问题。