UI 测试失败 - 未找到 MenuItems 的匹配项

Posted

技术标签:

【中文标题】UI 测试失败 - 未找到 MenuItems 的匹配项【英文标题】:UI Testing Failure - No matches found for MenuItems 【发布时间】:2016-07-11 15:03:18 【问题描述】:

错误:

  UIPasteboard.generalPasteboard().string = constant.password

  enterPasswordTextField.doubleTap()

  // Tap the Paste button to input the password
  app.menuItems["Paste"].tap()

我已经在我的测试用例中编写了这段代码,我什至尝试为模拟器禁用硬件键盘,但 doubletap() 函数仍然不起作用。

我正在使用 Xcode 7.3.1。

【问题讨论】:

【参考方案1】:

您需要为 menuItem 的出现添加一个期望值。请注意,doubleTap() 仅在文本字段已经获得焦点时才有效,因此您应该在双击之前添加一个额外的 tap()

    let app = XCUIApplication()

    UIPasteboard.generalPasteboard().string = "hello"

    let enterPasswordTextField = app.textFields["textField"]
    enterPasswordTextField.tap()

    expectationForPredicate(NSPredicate(format: "count > 0"), evaluatedWithObject: app.menuItems, handler: nil)
    enterPasswordTextField.doubleTap()
    waitForExpectationsWithTimeout(10.0, handler: nil)

    app.menuItems["Paste"].tap()

请记住,将访问菜单项与本地化测试一起使用可能不是最佳主意,因为它可能会在非英语设备上的设备上失败。因此,您应该使用最复杂的逻辑来确定粘贴菜单项的位置。对于初学者,在文本字段为空的过度简化假设中,您可能需要替换

app.menuItems["Paste"].tap()

app.menuItems.elementsBoundByIndex(2).tap()

【讨论】:

嗨 Tomas 感谢您的回答,但它仍然无法正常工作。 究竟是什么不工作?你有什么错误吗? 嗨 Tomas 感谢您的回答,但它仍然无法正常工作。我尝试了相同的代码,但仍然出现错误,我想双击 SecureTextField 。(不是正常的 TextField)错误:异步等待失败:超过 10 秒的超时,预期未实现:“对象 count > 0: 0x7fb148f1cd60>". 我也试过这个 ..MenuItems 选项没有在模拟器中弹出 ..我尝试禁用硬件键盘,但仍然双击()不适用于 SecureTextFeilds。 你应该逐步执行测试代码,看看tapdoubleTap方法是否正确执行。检查在运行 tap 后文本字段是否获得焦点,并且在 doubleTap 之后您会看到菜单项【参考方案2】:

https://***.com/a/58246279/9109530

当 isSecureTextEntry = true 你应该使用 app.secureTextFields 而不是 app.textFields 如下行

let passwordField = app.secureTextFields["password"]

【讨论】:

【参考方案3】:

分别点按两次 - 一次将焦点放在文本字段上,然后一次以调出菜单项。

请注意,如果您以双击非活动文本字段的速度双击,则不会出现粘贴板菜单,因此只需尝试将操作分成两个单独的部分。如果需要,请在每次点击之间添加睡眠命令。

【讨论】:

以上是关于UI 测试失败 - 未找到 MenuItems 的匹配项的主要内容,如果未能解决你的问题,请参考以下文章

iPhone UI 测试 - 如何访问键盘上的删除键

Xcode 10 UI 测试原因:Cocoapods 未找到图像

计时器经过后,SwiftUI 应用程序的 UI 测试未找到设置了可访问性标识符的元素

使用 Pycharm 执行 .robot 时,Pybot 给出错误“未找到关键字”和“导入测试库失败”

Xcode 6.4 Swift 单元测试无法编译:“GPUImage.h 未找到”“导入桥接头失败”

元素 UI 测试抛出 ReferenceError: 消息未定义