情况:
我想用UI测试我的进度视图,看看它的进度是否有所增加。
我尝试了什么:
通过在我的UI测试中使用断点并使用po print(app.debugDescription
),我可以成功查看和访问UIProgressView
元素。
它被称为:
Other, 0x6080003869a0, traits: 8589935104, {{16.0, 285.5}, {343.0, 32.0}}, identifier: 'progressView', label: 'Progress', value: 5%
我使用let progressView = secondTableViewCell.otherElements["progressView"]
访问它,因为.exists
返回true。
现在,为了检查进度,上面的描述提示“value”属性,目前为5%。但是,当我尝试progressView.value as! String
或Double或其中任何一个时,我似乎无法获得该属性,因为它不符合NSCoder。
问题:
是否可以对UIProgressView进行UI测试并使用它的进度值?
我的最终自定义解决方案:
使用value属性(当转换为String时)现在以某种方式工作。由于我想检查进度是否随着时间的推移而增加,我将删除String以获取其中的数字进度以进行比较。这是我现在使用的解决方案:
// Check if progress view increases over time
let progressView = secondTableViewCell.otherElements["progressView"]
XCTAssert(progressView.exists)
let progressViewValueString = progressView.value as! String
// Extract numeric value from '5%' string
let progressViewValue = progressViewValueString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
// Let progress increase
sleep(3)
let newProgressViewValueString = progressView.value as! String
let newProgressViewValue = newProgressViewValueString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
XCTAssert(newProgressViewValue > progressViewValue)
答案 0 :(得分:1)
XCUIElement 符合 XCUIElementAttributes ,可让您访问value
类型的Any?
属性
运行时value
的实际类型取决于您要查询的UI元素类型。对于UIProgressView,它的类型为__NSCFString
,它是NSString
的具体子类。这意味着您可以安全地将其投射到String
:
这样做(假设你将进度视图的可访问性标识符设置为“progressView”):
func testProgressView() {
let app = XCUIApplication()
app.launch()
let progressView = app.progressIndicators["progressView"]
// alternative (if the above query does not work):
// let progressView = app.otherElements["progressView"]
let currentValue = progressView.value as? String
XCTAssertEqual(currentValue, "5 %")
}
奇怪的是,在某些情况下progressIndicator
查询不起作用。在这种情况下,您可以尝试otherElements
查询(请参阅上面代码中的评论)