Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode swift UI测试比较两个屏幕截图_Swift_Xcode Ui Testing_Xcuiscreenshot - Fatal编程技术网

Xcode swift UI测试比较两个屏幕截图

Xcode swift UI测试比较两个屏幕截图,swift,xcode-ui-testing,xcuiscreenshot,Swift,Xcode Ui Testing,Xcuiscreenshot,基本上我有一个项目列表,我可以使用一个按钮在列表中创建一个新项目 现在,我想测试单击按钮时是否将该项添加到列表中 在为此创建一个测试用例时,我想在点击按钮之前和之后截取屏幕截图,并比较它们以了解是否添加了该项。但现在我被困在如何比较两个截图的问题上 PS:列表很复杂,项目可能包含不同的数据 private func takeScreenshot() -> XCUIScreenshot{ return XCUIScreen.main.screenshot() } private

基本上我有一个项目列表,我可以使用一个按钮在列表中创建一个新项目

现在,我想测试单击按钮时是否将该项添加到列表中

在为此创建一个测试用例时,我想在点击按钮之前和之后截取屏幕截图,并比较它们以了解是否添加了该项。但现在我被困在如何比较两个截图的问题上

PS:列表很复杂,项目可能包含不同的数据

private func takeScreenshot() -> XCUIScreenshot{
    return XCUIScreen.main.screenshot()
}


private func testElements(){
    let app = XCUIApplication()
    app.buttons["List Items"].tap()
    app.tables["OuterTable"].cells.allElementsBoundByIndex.first?.tap()
    let createBar = app.otherElements["createBar"]
    let button = app.buttons["CreateButton"]
    let initialScreenshot = takeScreenshot()
    button.tap()
    let newScreenshot = takeScreenshot()
    //Compare initialScreenshot and new Screenshot
}

PS:列表以自底向上的方式显示,就像您看到的聊天一样,新项目将添加到底部。

有一个名为IOSNapshotTestCase(FBSnapshotTestCase)的库,它就是这样做的。曾经是Facebook项目,现在是优步项目

它被设置为拍摄视图/视图控制器的屏幕截图,然后在后续的测试运行中,它会将您的视图与保存的快照图像进行比较,并生成显示任何差异的输出图像

我从中读到:

“它通过绘制视图或图层以及 将现有快照转换为两个CGContextRef并进行内存比较 使用C函数memcmp()执行这些操作。“


你能补充一下你已经尝试过的吗?实际上我还没有,正如你在问题中看到的,我一直在思考如何比较两个截图。尽管如此,我还是要添加reference@regina_fallangi添加的代码请检查您是否需要任何东西,否则sean图像实际上是一个包含(R,G,B,A)值元组的NxM矩阵。naíve方法是将每个通道上的两个图像矩阵相减,然后求和。如果所有通道的总和为0或在某个公差值内,则两个屏幕截图是相同的。是否有其他方式太耗时。或任何其他检测列表中是否添加了新项的方法