是否可以将 UITests 目标中的文件复制到应用程序的文档目录中?
Posted
技术标签:
【中文标题】是否可以将 UITests 目标中的文件复制到应用程序的文档目录中?【英文标题】:Is it possible to copy a file in a UITests target to the documents directory of the app? 【发布时间】:2019-10-29 03:11:55 【问题描述】:我的 UITests 目标中有一个示例文本文件。我想将此文件复制到应用程序的文档目录,以便在我的应用程序中执行文件上传测试时,我可以通过文件应用程序选择它并上传。
【问题讨论】:
为什么要投反对票?请解释原因 我没有投反对票,但是您尝试了什么?这应该与在您的应用程序中复制文件没有太大不同,但在您的测试文件中除外。或者您可以检查您的应用程序以查看测试是否正在运行,如果是,请复制该文件。 请点赞。我刚刚尝试将包中的文件复制到应用程序的文档目录中。但是当我查看文件应用程序时,文件不在这里。请注意,我正在做一些 ui 测试。 您是否更新了您的信息列表以包括LSSupportsOpeningDocumentsInPlace
和UIFileSharingEnabled
或UISupportsDocumentBrowser
? (check out this article for example) 此外,如果您想要投票,您应该更详细地更新您的问题,指出您尝试过的内容并提供信息以重现问题:more info here。
我会检查的。谢谢。
【参考方案1】:
这可以通过使用 XCUIApplication 的 launchArguments 来实现。它需要在App的plist中包含以下键:LSSupportsOpeningDocumentsInPlace
和UIFileSharingEnabled
或UISupportsDocumentBrowser
。
// File: FileUploadUITests.swift
// Target: UITests
func launchApplication()
let fileName = "__File_12345678910.txt"
let app = XCUIApplication()
app.launchArguments.append("-fileUrlPath")
app.launchArguments.append(sampleTextFileURL().path)
app.launchArguments.append("-fileName")
app.launchArguments.append(fileName)
app.launch()
func sampleTextFileURL() -> URL
let bundle = Bundle(for: FileUploadUITests.self)
return bundle.url(forResource: "text_file_example", withExtension: "txt")!
// File: TestHelper.swift
// Target: App
@discardableResult
func processArgumentsForTesting() -> Bool
if let index = ProcessInfo.processInfo.arguments.index(where: $0 == "-fileUrlPath" )
let path = ProcessInfo.processInfo.arguments[index + 1]
let url = URL(string: path)!
let fileName: String?
if let index = ProcessInfo.processInfo.arguments.index(where: $0 == "-fileName" )
fileName = ProcessInfo.processInfo.arguments[index + 1]
else
fileName = nil
copyTestFileToDocumentDirectory(url: url, fileName: fileName)
return true
return false
private let fileManager = FileManager.default
private var documentDirectoryURLOfTheApp: URL
let paths = fileManager.urls(for: .documentDirectory, in: .allDomainsMask)
let documentDirectoryPath = paths.first!
return documentDirectoryPath
@discardableResult
private func copyTestFileToDocumentDirectory(url: URL, fileName: String? = nil) -> Bool
let directory = documentDirectoryURLOfTheApp
let destination = directory.appendingPathComponent(fileName ?? url.lastPathComponent).path
let isOkay: Bool
do
if fileManager.fileExists(atPath: destination)
try fileManager.removeItem(atPath: destination)
try fileManager.copyItem(atPath: url.path, toPath: destination)
isOkay = true
catch
isOkay = false
return isOkay
// File: AppDelegate.swift
// Target: App
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
processArgumentsForTesting()
return true
【讨论】:
以上是关于是否可以将 UITests 目标中的文件复制到应用程序的文档目录中?的主要内容,如果未能解决你的问题,请参考以下文章