形势:
我想要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"]返回true时,我使用.exists访问它,这是可行的。
现在,为了检查进度,上面的描述提示了“value”属性,该属性目前为5%。然而,当我尝试progressView.value as! String或Double或任何一个,我似乎不能得到的属性,因为它是不符合NSCoder。
问题:
是否有可能对UIProgressView进行UI测试并使用它的进度值?
我的最后一个定制解决方案:
以某种方式使用value属性(当转换为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)发布于 2017-09-22 09:39:17
XCUIElementAttributes允许您访问类型为Any?的value属性。
运行时的实际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查询(请参阅上面代码中的注释)
https://stackoverflow.com/questions/46344733
复制相似问题