我正在学习使用XCTest
进行UI测试。我无法理解XCUIElementQuery.allElementsBoundByAccessibilityElement
的文件:
立即评估查询并返回绑定的元素数组 得到的辅助功能元素。
“生成的辅助功能元素绑定的元素”是什么意思?另外,与allElementsBoundByIndex
的区别是什么?
答案 0 :(得分:2)
allElementsBoundByAccessibilityElement
的文档不是很好,但是我通过调试器来确定与allElementsBoundByIndex
的区别。
调用allElementsBoundByAccessibilityElement
或allElementsBoundByIndex
将返回XCUIElement
对象的数组。
let app = XCUIApplication();
app.launch();
let elementsByAccessibilityElement = app.images.allElementsBoundByAccessibilityElement;
let elementsByIndex = allElementsBoundByIndex;
返回此数组后,XCUIElement
对象本身并没有真正解析,并保留了对原始查询的引用。
尝试通过.label
访问诸如XCUIElement
之类的属性...
您将看到元素通过对可访问性层次结构进行快照,然后重新运行原始查询来查找元素来解决自身。您可以在调试控制台中看到如下所示的输出:
t = 5.76s Get all elements bound by index for: Descendants matching type Other
t = 5.84s Snapshot accessibility hierarchy for app with pid 4267
t = 10.79s Find: Descendants matching type Other
当元素解析并运行原始查询时,这两种方法之间的巨大差异。调用allElementsBoundByIndex
时,XCUIElement
实例通过运行原始查询然后在该索引处获取结果来查找自己。
这意味着,如果应用程序UI在调用allElementsBoundByIndex
与实际解析数组中的XCUIElement
对象之间进行了更改,则数组中的元素集可能会与您最初预期的不同。
调用allElementsBoundByAccessibilityElement
时,XCUIElement
实例通过运行原始查询并获取与该元素在创建查询时具有的可访问性标识符匹配的结果来查找自己。
如果应用程序UI在调用allElementsBoundByAccessibilityElement
与实际解析数组中的XCUIElement
对象之间切换,并且原始元素之一不再存在,则应用程序将引发错误。