我是UI测试写作的新手。
我想知道是否可以知道视图中存在哪些元素。我想知道它们的数量和方式。
我试过这样的东西来循环遍历所有元素,但它不起作用。
for element in app.accessibilityElements! {
print(element)
}
答案 0 :(得分:6)
您正在寻找XCUIElement的debugDescription
方法,在您的情况下,获取当前可见窗口的整个层次结构:
app.debugDescription
引用标题评论:
提供有关元素的调试信息。字符串中的数据将根据以下内容而有所不同 捕获时间,但可能包括以下任何内容以及其他数据:
• Values for the elements attributes. • The entire tree of descendants rooted at the element. • The element's query.
此数据仅用于调试 - 取决于作为测试的一部分的任何数据不受支持。
答案 1 :(得分:5)
您可以在测试用例中始终有一个断点,然后对控制台进行一些打印调用。
po app.accessibilityElements
po app.accessibilityElements.elementBoundByIndex(0)
po app.buttons["Icon Menu Light"]
etc.
查看输出视图层次结构中要返回的内容,或者只是对po app
的简单调用将打印层次结构。
一旦你知道一个特定的视图存在.. app.buttons["Icon Menu Light"].exists
..你可以尝试使用这样的东西来确认按钮/元素在当前视图中是可见的,方法是将其传递给辅助函数,如:
func isElementInView(element: XCUIElement) -> Bool {
let window = XCUIApplication().windows.elementBoundByIndex(0)
return CGRectContainsRect(window.frame, element.frame) }
这将告诉您元素是否在屏幕上可见,因为element.exist
调用将返回true,即使该元素在屏幕外并且尚未向用户显示(即如果某些内容隐藏在屏幕上然后过渡到框架)