如何对 UIProgressView 进行 UITest?
How to UITest UIProgressView?
情况:
我想UI-测试我的进度视图,看看它的进度是否增加了。
我试过的:
通过在我的 UI-test 中使用断点并使用 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
returns 是正确的。
现在,要检查进度,上面的描述提示 'value' 属性,目前为 5%。但是,当我尝试 progressView.value as! String
或 Double 或任何一个时,我似乎无法获得 属性 因为它不符合 NSCoder 标准。
问题:
是否可以 UI-测试 UIProgressView 并使用它的进度值?
我的最终自定义解决方案:
使用值 属性(当转换为字符串时)现在以某种方式工作。因为我想检查进度是否随时间增加,所以我剥离了字符串以获取其中的数字进度以进行比较。这是我现在使用的解决方案:
// 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)
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
查询(请参阅上面代码中的注释)
情况:
我想UI-测试我的进度视图,看看它的进度是否增加了。
我试过的:
通过在我的 UI-test 中使用断点并使用 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
returns 是正确的。
现在,要检查进度,上面的描述提示 'value' 属性,目前为 5%。但是,当我尝试 progressView.value as! String
或 Double 或任何一个时,我似乎无法获得 属性 因为它不符合 NSCoder 标准。
问题:
是否可以 UI-测试 UIProgressView 并使用它的进度值?
我的最终自定义解决方案:
使用值 属性(当转换为字符串时)现在以某种方式工作。因为我想检查进度是否随时间增加,所以我剥离了字符串以获取其中的数字进度以进行比较。这是我现在使用的解决方案:
// 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)
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
查询(请参阅上面代码中的注释)