【问题标题】:Detecting Paste Notification in UI Tests?在 UI 测试中检测粘贴通知?
【发布时间】:2021-08-14 18:17:03
【问题描述】:

我有一个用例,我正在练习粘贴到文本视图然后导航。

我想知道是否有办法等待粘贴通知消失,因为它会阻止与下方元素的交互。

有人对此有任何想法吗?我觉得它应该靠跳板生活,虽然我还没有找到它。

谢谢!

【问题讨论】:

  • 您是否碰巧通过 UI Paste 按钮进行粘贴?如果是这样,我会进行一项测试,等待该按钮消失后再继续。如果您以编程方式粘贴,我对您没有任何想法。
  • 很好的建议@MikeCollins,尽管Paste 按钮在通知之前消失了。不过谢谢!
  • 等待它对我有用:耸耸肩:我将在下面分享我的代码。
  • 您有没有找到满意的解决方案?我决定今天在手机上尝试我的框架,这是唯一导致问题的原因。如果我在将数据添加到粘贴板后添加 sleep(1),一切都很好,但我讨厌睡觉;这将是我的代码库中唯一的一个,但我没有找到任何方法来检测这种状态。我可以添加复杂的代码来检测故障并重试,但我认为睡眠可能更可取,因为它实际上是我正在做的事情,一行代码,并且非常易读。

标签: ios xcode accessibility xctest xcuitest


【解决方案1】:

等待Paste 菜单项消失对我来说已经足够延迟了。如果没有这个,我的测试在从剪贴板复制时会失败,因为和你一样,在 UI 准备好之前,事情试图继续进行。

UIPasteboard.general.string = searchTerm
searchField.tap()
app.menuItems["Paste"].tap()
_ = app.menuItems["Paste"].waitForDisappearance()

然后waitForDisappearance 是一个非常标准的期望等待函数,它扩展了XCUIElement

func waitForDisappearance(timeout: TimeInterval = 2.0) -> Bool {
    let expectation = XCTNSPredicateExpectation(predicate: NSPredicate(format: UIStatus.notExist.rawValue),
                                                object: self)
    let result = XCTWaiter.wait(for: [expectation], timeout: timeout)
    switch result {
    case .completed:
        return true
    default:
        return false
    }
}

有时我会根据结果做一些事情,但大多数时候我会把它扔掉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多