如何在XCUIElement中选择XCUITest的父元素?根据文档的说法,这个班有children()和descendants(),但是没有选择父母或兄弟姐妹的东西。在我看来,我一定是遗漏了什么--如果没有双向导航,苹果怎么能拥有一个元素树呢?
我知道containing()在XCUIElementQuery上有一种方法,但这是不一样的。我还知道accessibilityIdentifier可能会有所帮助,但我正在考虑编写一个通用方法,用于使用给定的Navbar标签测试任何视图。传递我想访问的所有元素的所有标识符似乎不是一个好的选择。
发布于 2022-05-17 10:57:08
不幸的是,没有直接命名的方法来访问类似于苹果提供的children()和descendants()的父元素,但实际上您在containing()方面走的是正确的道路。当我需要根据子/后代定位父元素时,通常有两种方法来处理它:
containing(_:identifier:)
let parentElement = app.otherElements.containing(.textField, identifier: "test").firstMatch
或
let parentElement = app.otherElements.containing(.textField, identifier: "test").element(boundBy: 0)containing(_ predicate: NSPredicate)
let parentElement = app.otherElements.containing(NSPredicate(format: "label CONTAINS[c] 'test'").firstMatch
或
let parentElement = app.otherElements.containing(NSPredicate(format: "label CONTAINS[c] 'test'").element(boundBy: 0)这些只是随机数据/元素类型的示例,因为您没有确切地提到您想要实现的目标,但是您可以从那里开始。
更新:
和往常一样,苹果的文档服务也不太好。他们说“后代”,但实际上他们的意思是直系后代(子女)和非直系后裔(后裔)。不幸的是,没有任何保证,也没有通用的解决方案。它应该基于您当前的需求和应用程序实现。更多可能有用的例子:
element(boundBy: index)。因此,如果您知道XCUIElementQuery会给您提供5个元素,并且您知道您需要第三个元素:
let parentElement = app.otherElements.containing(.textField, identifier: "test").element(boundBy: 2)let parentViews = app.otherElements.matching(identifier: "SomeView")
let subView = parentViews.element(boundBy: 2).otherElements.containing(.button, identifier: "SomeButton").element(boundBy: 1)这将为您提供第二个子视图,其中包含一个带有标识符"SomeButton“的按钮,该按钮来自带有标识符"SomeView”的第三个父视图。使用这种方法,你可以微调,直到你完全得到你所需要的,而不是所有的父母,祖父母,曾祖父母等。
我希望苹果为带有XCTest的定位器提供更多的灵活性,就像Xpath那样,但是大多数情况下,即使这些工具也是足够的。
https://stackoverflow.com/questions/72270184
复制相似问题