在 XCode 中的 UI 测试期间无法访问自定义视图

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/34288686/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 08:19:30  来源:igfitidea点击:

Cannot access custom view during UI Testing in XCode

iosxcodeswiftxcode-ui-testing

提问by Claus

In my app there is a label which is contained inside a simple view. The view has a tap recogniser which will trigger a function ("why not using a button?" you might ask..well, we had to perform some funky animation and that was our best layout to do it). The problem is that I cannot access this view for simulating a tap on it. I can access the label with app.staticText["Enter name..."]but if I tap on it (hoping in a propagation to the parent view). Recording a session where I tap on the label will product an app.staticText["Enter name..."]command but playing it back products the same error.

在我的应用程序中有一个包含在简单视图中的标签。该视图有一个点击识别器,它将触发一个功能(“为什么不使用按钮?”你可能会问......好吧,我们必须执行一些时髦的动画,这是我们最好的布局)。问题是我无法访问这个视图来模拟点击它。我可以访问标签,app.staticText["Enter name..."]但如果我点击它(希望传播到父视图)。录制我点击标签的会话将产生一个app.staticText["Enter name..."]命令,但播放它会产生相同的错误。

I have tried activating the Accessibility flat for that view in the Storyboard and giving it an ID in order to get it by using this command:

我已经尝试在 Storyboard 中激活该视图的辅助功能平面并为其提供一个 ID,以便使用以下命令获取它:

app.windows.elementMatchingType(.Any, identifier: "MyView")

but as soon this flag is checked and I run my test the app enters a sort of loop of loop displaying this message over and over:

但是一旦选中此标志并运行我的测试,应用程序就会进入一种循环循环,一遍又一遍地显示此消息:

Find: Elements matching predicate '"MyView" IN identifiers'

This view is not inside a table but in the main View. How can I gain access to it?

此视图不在表内,而是在主视图中。我如何才能访问它?

EDIT 1: this is the output of app.DebugDescription() (thanks to @Che for the advice):

编辑 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'
  }

采纳答案by Silmaril

According to log output you've provided there is no view with MyViewidentifier. You can set it with a help of accessibilityIdentifierproperty.

根据您提供的日志输出,没有带有MyView标识符的视图。您可以借助accessibilityIdentifier属性进行设置。

回答by Che

Do you have access to another elements in your app? Can you successfully tap on smth? You can see your app hierarchy by

您是否可以访问应用程序中的其他元素?你能成功地点击smth吗?您可以通过以下方式查看您的应用程序层次结构

let app = XCUIApplication()
print(app.debugDescription)

and try to understand where is your view and what elementtype it is (eg it can be .otherElement :))

并尝试了解您的视图在哪里以及它是什么元素类型(例如它可以是 .otherElement :))