3

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

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

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

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:列表以自下而上的方式显示,就像您看到聊天新项目将添加在底部一样。

4

1 回答 1

2

有一个名为 iOSSnapshotTestCase(FBSnapshotTestCase) 的库可以做到这一点。曾经是 Facebook 项目,现在是 Uber 项目。

iOSSnapshotTestCase

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

我从https://www.objc.io/issues/15-testing/snapshot-testing/读到:

“它通过将视图或图层以及现有快照绘制到两个 CGContextRef 中并使用 C 函数 memcmp() 对它们进行内存比较来进行比较。”

于 2018-11-02T18:15:47.493 回答