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

时间:2016-07-11 15:03:19

标签: ios swift ios9 xcode-ui-testing

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

  UIPasteboard.generalPasteboard().string = constant.password

  enterPasswordTextField.doubleTap()

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

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

我正在使用Xcode 7.3.1。

3 个答案:

答案 0 :(得分:3)

您需要为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()

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

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

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

答案 1 :(得分:0)

分别进行两次点击 - 一次用于对焦于文本字段,然后一次用于调出菜单项。

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

答案 2 :(得分:0)

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

当isSecureTextEntry = true时,应使用app.secureTextFields而不是app.textFields,如下面的行

let passwordField = app.secureTextFields["password"]