在 UITestCase 期间使用可访问性标识符识别 UISearchBar

Identify UISearchBar with accessibility identifier during UITestCase

我的 UIViewController 上有一个 UISearchBar。 但是 UISearchBar 默认情况下没有可访问性标识符,所以我尝试使用 "User Define Runtime Attribute".

定义手动可访问性标识符

但是在 UITestCase 写作期间,我无法使用 "User Define Runtime Attribute" 访问或识别 UISearchBar。但我无法使用标识符访问它。我总是不得不使用我不想使用的占位符文本,因为它会在 "multi-language" 支持时引起问题。

关于这个问题我已经参考了堆栈溢出的答案,但是 none 符合我的要求。

请帮忙提供解决方案。 谢谢。

在应用程序中,当我使用用户定义运行时属性将 UISearchBaraccessibilityLabel 设置为 MySearchBar 时,如果您查看应用程序的 UI 层次结构,您可以看到以下内容:

Attributes: Application, 0x604000198050, pid: 18393, {{0.0, 0.0}, {414.0, 736.0}}, label: 'MyApp'
Element subtree:
 →Application, 0x604000198050, pid: 18393, {{0.0, 0.0}, {414.0, 736.0}}, label: 'MyApp'
    Window, 0x6000001993d0, Main Window, {{0.0, 0.0}, {414.0, 736.0}}
      Other, 0x604000199a50, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
        Other, 0x600000197aa0, traits: 8589934592, {{0.0, 20.0}, {414.0, 56.0}}, identifier: 'MySearchBar'
          Image, 0x604000198390, traits: 8589934596, {{0.0, 0.0}, {414.0, 76.0}}
          SearchField, 0x60000019a4e0, traits: 146031248384, {{8.0, 30.0}, {398.0, 36.0}}

这应该能让您了解如何找到您的搜索栏。首先搜索类型为 other 的元素,该元素具有您设置到搜索栏的标识符,然后查找此类型为 searchBar.

的元素的子元素
let searchField = XCUIApplication().otherElements["MySearchBar"].searchFields.firstMatch
searchField.tap()
searchField.typeText("Hello")