如何使用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
相关产品推荐
相关产品推荐

