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