如何使用 XCUIElementQuery 测试 UIView 的存在?
Posted
技术标签:
【中文标题】如何使用 XCUIElementQuery 测试 UIView 的存在?【英文标题】:How can I test for the existence of a UIView using XCUIElementsQuery? 【发布时间】:2015-12-14 18:45:01 【问题描述】:很难从 Apple 找到合适的 UI 测试框架文档。我已经看到了很多可以找到具有特定名称的按钮和标签的示例,但是如何查找通用 UIView?
例如,假设我设置了一个带有 accessibilityLabel == "Some View" 的视图,我如何在测试执行期间找到具有该名称的视图?
我尝试(不成功)以下代码:
XCUIElement *pvc = [[app childrenMatchingType:XCUIElementTypeAny] elementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityLabel == 'Places View'"]];
NSPredicate *exists = [NSPredicate predicateWithFormat:@"exists == true"];
[self expectationForPredicate:exists evaluatedWithObject:pvc handler:nil];
[self waitForExpectationsWithTimeout:10 handler:nil];
NSLog(@"%@", [[app childrenMatchingType:XCUIElementTypeAny] elementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityLabel == 'Places View Controller'"]]);
【问题讨论】:
【参考方案1】:我在上面的代码中看到的问题是,您专门试图在应用程序的子项中查找视图,而不是在应用程序的后代中查找。子视图严格来说是视图的子视图,搜索不会查看子子视图等。除此之外,它看起来很好。
试试:
XCUIElement *pvc = [[app descendantsMatchingType:XCUIElementTypeAny] elementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityLabel == 'Places View'"]];
此外,UIView
的默认设置是根本不参与可访问性,因此除了设置标签(顺便说一下,您关于设置标签的问题中的代码 sn-p 是进行比较而不是赋值)之外,您还应确保启用可访问性:
view.isAccessibilityElement = YES
view.accessibilityLabel = @"AccessibilityLabel"
【讨论】:
哦,我发现我在寻找孩子时犯了错误。不幸的是,搜索后代也不起作用......我尝试设置一个大的超时,但 Xcode 没有找到具有该可访问性标签的视图。 如果您使用辅助功能检查器,您可以选择您要查找的视图吗?除了设置标签之外,您还需要确保启用了可访问性。默认情况下,我认为 UIView 未启用可访问性。【参考方案2】:其他答案的查询有效,但我发现您也可以简单地通过以下方式找到视图:
app.otherElements["MenuViewController.menuView"].swipeLeft()
在我的例子中,MenuViewController.menuView
是一个带有accessibilityIdentifier
集的UIView
。
【讨论】:
以上是关于如何使用 XCUIElementQuery 测试 UIView 的存在?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 7 UI 测试 XCUIElementQuery 随机未正确更新
如何在 XCUIElementQuery 中获取 XCUIElement 的索引?
UI 测试 NSPredicate 的单元格 staticTexts
使用 XCUIElementQuery 在 SwiftUI 中查找嵌入在表单中的 DatePicker() 的可访问性(标识符:)