【问题标题】:Timestamped Event Matching Error: Failed to find matching element时间戳事件匹配错误:未能找到匹配元素
【发布时间】:2016-08-05 15:22:32
【问题描述】:

我正在尝试在 Xcode 中生成 UItest。当我尝试滑动 UIview 我得到 一个错误:

Timestamped Event Matching Error: Failed to find matching element

error window

如果我尝试点击 UIView,也会发生这种情况。

【问题讨论】:

  • 你能再解释一下吗?
  • 我尝试在 UIview 上滑动或点击假设做某事(有手势 reconizer)但是当我做手势时会发生这个错误。我设法让它工作的唯一方法是使用查询,但它真的很复杂,我确定还有另一种方法

标签: swift xcode xcode-ui-testing


【解决方案1】:

即使您为元素启用了辅助功能,您也必须确保它具有唯一辅助功能标识符。就我而言,我复制并粘贴了 UISwitch 并为其分配了不同的插座,但它保持与原始插座相同的可访问性 ID。

【讨论】:

    【解决方案2】:

    通常当您要记录的元素的父元素设置为isAccessibilityElement = true 时会出现此问题。通常,您必须将父元素设置为 false 才能访问子元素。

    例如:如果视图中有UILabel,则视图的可访问性应设置为false,UILabel的可访问性应设置为true。

    【讨论】:

    • 这完全可以重现。正如您所说,将父元素设置为 isAccessibilityElement = true 不起作用!在我将其切换回 false 后,它再次起作用。
    【解决方案3】:

    在 Xcode 9.3 中,这显然仍然是一个问题,我所做的是:

    • 退出 Xcode
    • 重置模拟器的设置(硬件 -> 全部擦除 内容和设置)
    • 退出模拟器
    • 删除当前应用的派生数据
    • 重启 Xcode
    • 再次尝试录制 - 这次对我有用。

    【讨论】:

    • 我已将标识符提供为按钮的“skipButton”,在识别按钮时,它总是失败,我将按钮识别为 app.buttons["skipButton'],感谢您的帮助
    • 这些步骤对我不起作用。事实上,以前没有受到问题影响的小部件也受到了影响。
    • 为什么没有内容?
    【解决方案4】:

    对我自己有效的一个解决方案是以不同的方式识别对象。
    在 Xcode 8 中,我可以使用以下内容:

    XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()
    

    使用 Xcode 9,我得到了这个问题中提到的错误。最终使用了以下方法,它起作用了(虽然比原来的选项更脆弱)

    XCUIApplication().cells.element(boundBy: 1).tap()
    

    【讨论】:

    • @Developer 在你的测试函数中
    【解决方案5】:

    我偶尔会遇到这个问题。从 DerivedData 中删除应用的目录似乎有帮助。

    【讨论】:

      【解决方案6】:

      您应该验证是否为您正在滑动的 UIView 对象启用了“辅助功能”选项,例如:

      【讨论】:

      • 打开 WebView 的辅助功能使我的测试在解析 WebView 中的文本时失败。关闭托管 WebView 的 UIView 的辅助功能使测试成功。所以要小心。
      • 为了让它对我有用,我必须给它一个标签
      • 我发现这篇文章有助于使用 fastlane 截取 tableView 的屏幕截图。 stackoverflow.com/a/39331154/4475605
      • 这是哪里?我该如何设置?
      • @CoryMcAboy 您可以从代码中为您的自定义视图设置它:isAccessibilityElement = true
      【解决方案7】:

      对于录制新测试,我认为还没有解决方案。但是,如果您对已经存在的测试使用扩展强制点击,则可以。

      使用示例:

      extension XCUIElement {
      
          func forceTapElement() {
              if self.hittable {
                  self.tap()
              }
              else {
                  let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
                  coordinate.tap()
              }  
          }
      }
      
      func testSomethingWithCells() {
      
         let app = XCUIApplication()
         let cells = app.tables.cells
         sleep(1)
         cells.elementBoundByIndex(0).forceTapElement()
      }
      

      您可以在此处查看原始帖子:

      Xcode UI test - UI Testing Failure - Failed to scroll to visible (by AX action) when tap on Search field "Cancel' button

      【讨论】:

      • elementBoundByIndex' 已重命名为 'element(boundBy:)',例如:cells.element(boundBy: 0).tap()
      猜你喜欢
      • 2016-08-04
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 2019-09-17
      • 1970-01-01
      相关资源
      最近更新 更多