使用xctest从照片/图库中选择图像

时间:2017-04-11 09:05:38

标签: ios swift gallery xctest

我正在为ios应用程序编写测试框架,该应用程序需要从照片/图库应用程序导入图像以进行验证。我正在使用XCTest Framework进行测试。我已经在互联网上寻找了一些资源,却找不到任何资源。任何人都可以帮我解决问题。同样,我选择的图像不是来自应用程序内部,而是来自图像但是来自照片库。

5 个答案:

答案 0 :(得分:2)

您可以访问照片库,但它需要XCUITest,并且记录器无法在Apple的UIRemoteView内部运行,就像照片选择器一样。您要做的是进入XCUITest内的照片选择器,设置一个断点,然后检查视图层次结构以找到能够使用XCUITest导航的元素。下面的示例适用于模拟器随附的图片。

    let app = XCUIApplication()
    // get to the photo library
    // set a breakpoint, po [[UIWindow keyWindow] recursiveDescription]
    let tablesQuery = app.tables
    app.sheets.buttons["Choose From Library"].tap()
    app.cells["Camera Roll"].tap()
    app.cells["Photo, Landscape, March 12, 2011, 7:17 PM"].tap()

答案 1 :(得分:1)

let photosApp = XCUIApplication(bundleIdentifier: "com.apple.mobileslideshow")
photosApp.launch()

let continueButton = photosApp.buttons["Continue"]
if continueButton.waitForExistence(timeout: 2) {
  continueButton.tap()
}
photosApp.collectionViews["PhotosGridView"].cells.firstMatch.tap()

答案 2 :(得分:0)

您无法使用XCTest与自己应用外的应用互动。测试中引用了应用程序的包标识符,这是他们能够与之交互的唯一应用程序。

XCTest需要对应用程序内部进行一定程度的访问,以便为您提供有关它的信息,以便您通过XCTest与其进行交互,这不是可以在您没有访问的应用程序中访问的内容让自己。

答案 3 :(得分:0)

XCTest为此提供了特殊的方法。

        let galleryAccessMonitor = addUIInterruptionMonitor(withDescription: "Intercept Gallery Access") { alert -> Bool in
            alert.buttons.element(boundBy: 1).tap() /// tap accept
            return true /// mark as handled
        }

请参阅https://useyourloaf.com/blog/handling-system-alerts-in-ui-tests/

答案 4 :(得分:0)

这是我的解决方案,它独立于添加到图库的照片

let app = XCUIApplication()
app.launch()

app.buttons["add.photo.button"].tap()

let photosNavBar = app.navigationBars["Photos"]

if photosNavBar.waitForExistence(timeout: 2) {
    XCTAssert(app.navigationBars["Photos"].exists)
} else {
    XCTFail()
}