在 XCode 的 UI 测试期间无法访问自定义视图
Cannot access custom view during UI Testing in XCode
在我的应用程序中,有一个标签包含在一个简单的视图中。
该视图有一个点击识别器,它将触发一个功能("why not using a button?" 你可能会问..好吧,我们不得不执行一些时髦的动画,这是我们最好的布局)。问题是我无法访问此视图来模拟点击它。
我可以使用 app.staticText["Enter name..."]
访问标签,但如果我点击它(希望传播到父视图)。
录制我点击标签的会话将产生一个 app.staticText["Enter name..."]
命令,但回放它会产生相同的错误。
我已经尝试在 Storyboard 中激活该视图的辅助功能平面并为其提供 ID,以便使用此命令获取它:
app.windows.elementMatchingType(.Any, identifier: "MyView")
但是一旦选中此标志并且我 运行 我的测试应用程序就会进入一种循环循环,一遍又一遍地显示此消息:
Find: Elements matching predicate '"MyView" IN identifiers'
此视图不在 table 中,而是在主视图中。我怎样才能访问它?
编辑 1:
这是 app.DebugDescription() 的输出(感谢@Che 的建议):
Element subtree:
→Application 0x14e7e300: {{0.0, 0.0}, {320.0, 568.0}}, label: 'MyApp'
Window 0x14dbfef0: Main Window, {{0.0, 0.0}, {320.0, 568.0}}
Other 0x14dc0a40: traits: 8589934592, {{0.0, 0.0}, {320.0, 568.0}}
Other 0x14dc0ff0: traits: 8589934592
Other 0x14eb4f50: traits: 8589934592, {{0.0, 0.0}, {320.0, 568.0}}
Other 0x14eb53d0: traits: 8589934592
Button 0x14eb5940: traits: 8589934593, {{12.0, 26.0}, {30.0, 30.0}}, label: 'home hamburger'
Image 0x14eb5f00: traits: 8589934596, {{16.0, 30.0}, {22.0, 22.0}}, identifier: 'home_hamburger'
Other 0x14eb64c0: traits: 8589934592, {{0.0, 109.0}, {320.0, 459.0}}
Other 0x14eb6a20: traits: 8589934592, {{16.0, 167.0}, {288.0, 84.0}}
Image 0x14eb6f80: traits: 8589934596, {{59.0, 184.0}, {201.0, 50.0}}, identifier: 'main_logo'
Other 0x14eb4850: traits: 8589934592, {{16.0, 254.0}, {288.0, 60.0}}
StaticText 0x14eb79e0: traits: 8589934656, {{57.0, 264.0}, {160.0, 40.0}}, label: 'Enter name...'
Image 0x14eb7f90: traits: 8589934596, {{31.0, 275.0}, {18.0, 18.0}}, identifier: 'SearchIcon'
Other 0x14eb8530: traits: 8589934592, {{57.0, 274.0}, {2.0, 20.0}}
Other 0x14eb8ac0: traits: 8589934592, {{16.0, 262.0}, {288.0, 44.0}}
Image 0x14eb9060: traits: 8589934596, {{16.0, 262.0}, {288.0, 44.0}}
SearchField 0x14eb9610: traits: 146029151232, {{24.0, 270.0}, {272.0, 28.0}}
Other 0x14eb9bc0: traits: 8589934592
Other 0x14eba170: traits: 8589934592
Window 0x14eba730: {{0.0, 0.0}, {320.0, 568.0}}
StatusBar 0x14ebaca0: {{0.0, 0.0}, {320.0, 20.0}}
Other 0x14ebb220: {{0.0, 0.0}, {320.0, 20.0}}
Other 0x14ebb7b0: {{0.0, 0.0}, {320.0, 20.0}}
Other 0x14ebbd50: traits: 8388608, {{6.0, 0.0}, {35.0, 20.0}}, label: '3 of 5 bars, signal strength'
Other 0x14ebc330: traits: 8388608, {{44.0, 0.0}, {73.0, 20.0}}, label: 'vodafone UK network'
Other 0x14ebc8c0: traits: 8388608, {{122.0, 0.0}, {13.0, 20.0}}, label: '3 of 3 Wi-Fi bars', value: SSID
Other 0x14ebce50: traits: 8389120, {{146.0, 0.0}, {32.0, 20.0}}, label: '11:34'
Other 0x14ebd3d0: traits: 8388608, {{282.0, 0.0}, {33.0, 20.0}}, label: '100% battery power, Charging'
Path to element:
→Application 0x14e7e300: {{0.0, 0.0}, {320.0, 568.0}}, label: 'MyApp'
Query chain:
→Find: Target Application 0x14ea2c00
Output: {
Application 0x14e7e300: {{0.0, 0.0}, {320.0, 568.0}}, label: 'MyApp'
}
您可以访问应用中的其他元素吗?你能成功点击smth吗?
您可以通过
查看您的应用层次结构
let app = XCUIApplication()
print(app.debugDescription)
并尝试了解您的视图在哪里以及它是什么元素类型(例如,它可以是 .otherElement :))
根据您提供的日志输出,没有带有 MyView
标识符的视图。
您可以在 accessibilityIdentifier
属性.
的帮助下进行设置
在我的应用程序中,有一个标签包含在一个简单的视图中。
该视图有一个点击识别器,它将触发一个功能("why not using a button?" 你可能会问..好吧,我们不得不执行一些时髦的动画,这是我们最好的布局)。问题是我无法访问此视图来模拟点击它。
我可以使用 app.staticText["Enter name..."]
访问标签,但如果我点击它(希望传播到父视图)。
录制我点击标签的会话将产生一个 app.staticText["Enter name..."]
命令,但回放它会产生相同的错误。
我已经尝试在 Storyboard 中激活该视图的辅助功能平面并为其提供 ID,以便使用此命令获取它:
app.windows.elementMatchingType(.Any, identifier: "MyView")
但是一旦选中此标志并且我 运行 我的测试应用程序就会进入一种循环循环,一遍又一遍地显示此消息:
Find: Elements matching predicate '"MyView" IN identifiers'
此视图不在 table 中,而是在主视图中。我怎样才能访问它?
编辑 1: 这是 app.DebugDescription() 的输出(感谢@Che 的建议):
Element subtree:
→Application 0x14e7e300: {{0.0, 0.0}, {320.0, 568.0}}, label: 'MyApp'
Window 0x14dbfef0: Main Window, {{0.0, 0.0}, {320.0, 568.0}}
Other 0x14dc0a40: traits: 8589934592, {{0.0, 0.0}, {320.0, 568.0}}
Other 0x14dc0ff0: traits: 8589934592
Other 0x14eb4f50: traits: 8589934592, {{0.0, 0.0}, {320.0, 568.0}}
Other 0x14eb53d0: traits: 8589934592
Button 0x14eb5940: traits: 8589934593, {{12.0, 26.0}, {30.0, 30.0}}, label: 'home hamburger'
Image 0x14eb5f00: traits: 8589934596, {{16.0, 30.0}, {22.0, 22.0}}, identifier: 'home_hamburger'
Other 0x14eb64c0: traits: 8589934592, {{0.0, 109.0}, {320.0, 459.0}}
Other 0x14eb6a20: traits: 8589934592, {{16.0, 167.0}, {288.0, 84.0}}
Image 0x14eb6f80: traits: 8589934596, {{59.0, 184.0}, {201.0, 50.0}}, identifier: 'main_logo'
Other 0x14eb4850: traits: 8589934592, {{16.0, 254.0}, {288.0, 60.0}}
StaticText 0x14eb79e0: traits: 8589934656, {{57.0, 264.0}, {160.0, 40.0}}, label: 'Enter name...'
Image 0x14eb7f90: traits: 8589934596, {{31.0, 275.0}, {18.0, 18.0}}, identifier: 'SearchIcon'
Other 0x14eb8530: traits: 8589934592, {{57.0, 274.0}, {2.0, 20.0}}
Other 0x14eb8ac0: traits: 8589934592, {{16.0, 262.0}, {288.0, 44.0}}
Image 0x14eb9060: traits: 8589934596, {{16.0, 262.0}, {288.0, 44.0}}
SearchField 0x14eb9610: traits: 146029151232, {{24.0, 270.0}, {272.0, 28.0}}
Other 0x14eb9bc0: traits: 8589934592
Other 0x14eba170: traits: 8589934592
Window 0x14eba730: {{0.0, 0.0}, {320.0, 568.0}}
StatusBar 0x14ebaca0: {{0.0, 0.0}, {320.0, 20.0}}
Other 0x14ebb220: {{0.0, 0.0}, {320.0, 20.0}}
Other 0x14ebb7b0: {{0.0, 0.0}, {320.0, 20.0}}
Other 0x14ebbd50: traits: 8388608, {{6.0, 0.0}, {35.0, 20.0}}, label: '3 of 5 bars, signal strength'
Other 0x14ebc330: traits: 8388608, {{44.0, 0.0}, {73.0, 20.0}}, label: 'vodafone UK network'
Other 0x14ebc8c0: traits: 8388608, {{122.0, 0.0}, {13.0, 20.0}}, label: '3 of 3 Wi-Fi bars', value: SSID
Other 0x14ebce50: traits: 8389120, {{146.0, 0.0}, {32.0, 20.0}}, label: '11:34'
Other 0x14ebd3d0: traits: 8388608, {{282.0, 0.0}, {33.0, 20.0}}, label: '100% battery power, Charging'
Path to element:
→Application 0x14e7e300: {{0.0, 0.0}, {320.0, 568.0}}, label: 'MyApp'
Query chain:
→Find: Target Application 0x14ea2c00
Output: {
Application 0x14e7e300: {{0.0, 0.0}, {320.0, 568.0}}, label: 'MyApp'
}
您可以访问应用中的其他元素吗?你能成功点击smth吗? 您可以通过
查看您的应用层次结构let app = XCUIApplication()
print(app.debugDescription)
并尝试了解您的视图在哪里以及它是什么元素类型(例如,它可以是 .otherElement :))
根据您提供的日志输出,没有带有 MyView
标识符的视图。
您可以在 accessibilityIdentifier
属性.