我在我正在测试的应用程序的屏幕上定位XCUIElements有困难。我意识到您可以访问一个按钮,例如:
app.buttons[].elementBoundByIndex(0)但问题是,有时无法找到组件。就像在UITableView的单元格中有按钮的情况一样。我试着做一个XCUIElementQuery来找到按钮,但它不在那里。我试图查找表、表视图或集合视图,即使它们在视图控制器中,也不会在UI测试中找到。返回数组的计数将为零。
我最初试图记录测试,但单击要访问的元素无效。Xcode检测到它是“其他元素”,当尝试点击时,回放应用程序不会前进。
是否有一种高级方法来访问像UI层次结构中的UIView那样的组件来级联?
发布于 2016-04-14 17:53:43
当时我还不知道这一点,但我要找的基本上是debugDescription:
当您到达要调试的区域时,设置一个断点。然后
po print(app.debugDescription)
在调试控制台中。那么,您将看到层次结构。
发布于 2015-10-02 18:01:40
理想情况下,您应该在按钮上设置一个accessibilityIdentifier,并通过该按钮搜索它。对于屏幕上的元素,accessibilityIdentifier应该是唯一的。您可以在Interface (命令选项-3)中的标识检查器中或在代码中直接设置accessibilityIdentifier。一旦您有了一个查询,查询如下:
app.buttons["SomeAccessibilityIdentifier"]发布于 2016-11-17 19:25:15
Ryan Poolos答案对我来说是最好的答案,因为它用嵌套的UI元素解决了我的问题。
我们必须通过移除堆栈中的超级视图上的一些可访问性标识符来解决这个问题。虽然不太理想,但在不改变实际功能的情况下,它确实能正常工作。- Ryan Poolos
因此,考虑到这一点,我找到了有问题的元素的xib文件,选择了元素,选择了右侧面板上的选项卡“selected检查器”,并取消了可访问性复选框。

然后我做了一个元素的记录,结果是:
[[[[[XCUIApplication alloc] init].scrollViews.tables childrenMatchingType:XCUIElementTypeOther] elementBoundByIndex:index] childrenMatchingType:XCUIElementTypeButton].element;注意XCUIElementTypeOther在查询中的位置。当启用了可访问性标识符时,情况就不是这样了,我将得到:
[[[[[XCUIApplication alloc] init].scrollViews.tables.otherElements containingType:XCUIElementTypeStaticText identifier:@"username"] childrenMatchingType:XCUIElementTypeButton].element tap];显然,我不会知道用户名,因为它总是会改变,这是一个大问题。但是在移除可访问性标识符之后,
containingType:XCUIElementTypeStaticText identifier:@"username"变到
childrenMatchingType:XCUIElementTypeOther] elementBoundByIndex:index成功:)
https://stackoverflow.com/questions/32912885
复制相似问题