You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XCTAssert断言复制粘贴后的行内容一致性

我来帮你搞定这个断言失败的问题~

问题出在哪?

你现在用的XCTAssert(pastedBlockView.isEqual(copiedBlockView))是在比较两个XCUIElement对象本身,而不是它们里面的文本内容。复制粘贴后的两个元素是UI层级里的不同实例(一个是Row1,一个是Row2),所以isEqual必然会返回false,断言自然失败啦。

正确的做法:比较元素的文本内容

我们需要提取两个元素里的实际文本,再对比文本是否一致。具体用label还是value属性,取决于你的Paragraph Block控件把文本存在哪个属性里,一般label是比较常用的:

修改你的断言方法如下:

func confirmPastedParagraphBlock() -> BlockEditorScreen { 
    // 提取两个块的文本内容
    let copiedText = copiedBlockView.label
    let pastedText = pastedBlockView.label
    
    // 断言文本一致,还可以加个友好的错误提示
    XCTAssertEqual(copiedText, pastedText, "粘贴的段落文本应该和复制的完全一致")
    return self 
}

如果label取不到正确的文本,试试用value属性(有些文本输入类控件会把内容存在这里):

func confirmPastedParagraphBlock() -> BlockEditorScreen { 
    // 安全解包,避免nil导致崩溃
    let copiedText = copiedBlockView.value as? String ?? ""
    let pastedText = pastedBlockView.value as? String ?? ""
    
    XCTAssertEqual(copiedText, pastedText, "粘贴内容与复制内容不匹配")
    return self 
}

额外小提示:等待文本加载

有时候粘贴操作完成后,UI可能有短暂的延迟,文本还没显示出来就执行了断言,也会导致失败。可以加个等待逻辑确保文本加载完成:

func confirmPastedParagraphBlock() -> BlockEditorScreen { 
    // 等待粘贴块的文本不为空
    let textLoadedPredicate = NSPredicate(format: "label != ''")
    expectation(for: textLoadedPredicate, evaluatedWith: pastedBlockView, handler: nil)
    waitForExpectations(timeout: 5, handler: nil)
    
    // 再执行断言
    XCTAssertEqual(copiedBlockView.label, pastedBlockView.label)
    return self 
}

内容的提问来源于stack exchange,提问作者NewToSwiftNKotlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:17:43