如何在UIAutomation iOS中使用JavaScript获取本地文件内容(基本上是读取)

3
有可能在JavaScript中读取本地文件的方法吗?
我的文件夹:
     db.csv

     Parse.js

尝试在Parse.js中获取db.csv文件的内容,但是失败了。

你能分享一些链接吗?让我可以获得足够的知识来读取文件。我正在使用Xcode5中运行Instruments,在一个.js文件中运行测试脚本,需要从一个.csv文件中读入一些值。


你可以分享一下你尝试了什么,以及失败在哪里。简单回答:如果你正在浏览器中执行JavaScript,你不能从本地计算机读取文件。浏览器是不允许这样做的。 - gideon
2
这可能会对您有所帮助:https://dev59.com/5ms05IYBdhLWcg3wIObS - Shiva Saurabh
@gideon 和 Maverick,这是关于苹果的 UIAutomation 框架用于 iOS 测试的问题,尽管它是用 Javascript 编写的,但提供了对主机 shell 的访问。 - Ian
3个回答

3

iOS UIAutomation是苹果提供的一个API,用于在目标主机上运行任务。

performTaskWithPathArgumentsTimeout

使用这个工具,我们可以编写一个bash脚本来打印出我们想要获取的文件内容。

对于这个需求,Bash脚本可以非常简单,如下所示:

 #! /bin/bash
FILE_NAME="$1"
cat $FILE_NAME

请将其保存为例如FileReader.sh文件。

在您的自动化脚本中,

    var target = UIATarget.localTarget();
    var host = target.host();
    var result = host.performTaskWithPathArgumentsTimeout(executablePath,[filePath,fileName], 15);
UIALogger.logDebug("exitCode: " + result.exitCode);
    UIALogger.logDebug("stdout: " + result.stdout);
    UIALogger.logDebug("stderr: " + result.stderr);

其中,executablePath是需要执行命令的路径。

var executablePath = "/bin/sh";

filePath 是创建 FileReader.sh 文件的位置。执行时,将输出内容到标准输出(在我们的要求中)。 [给出文件的完全绝对路径]

fileName 是实际要获取内容的文件。 [给出文件的完全绝对路径] 在我的情况下,我有一个名为 Contents.csv 的文件,我需要读取它。

最后一个参数是超时时间,以秒为单位。

希望这能帮助其他人,尝试获取内容(读取文件),以执行 iOS UIAutomation。

参考资料:

https://dev59.com/_nfZa4cB1Zd3GeqPPUGR#19016573

https://developer.apple.com/library/iOS/documentation/UIAutomation/Reference/UIAHostClassReference/UIAHost/UIAHost.html


1
如果文件与您所在的站点位于同一域中,则可以使用Ajax加载它。 如果您正在使用Ajax,则应该像这样进行操作:
$.get('db.csv', function(csvContent){
    //process here
});

请注意,CSV文件的路径是相对于所在的网页而不是JavaScript文件的。
如果您不使用jQuery,则必须手动使用XmlHttpRequest对象来执行Ajax调用。
尽管您的问题似乎与此无关,但是如果文件位于不同的域上,则必须使用jsonP或CORS。
并且,以防这是您的目标,在客户端JavaScript中,您无法打开某种类型的流并读取文件。那将成为一个巨大的安全漏洞。

@Adam,感谢您的快速帮助。目前我没有使用Ajax,请让我知道是否可能使用JavaScript,如果您知道的话。欢迎提供任何相关建议。 - coder284
@coder284,你的问题不是很清楚。你是在服务器上运行JavaScript还是在浏览器上?你想读取本地文件还是从服务器返回的文件?请明确一下。 - gideon
@coder284 - 绝对不行。你不能在客户端JavaScript中打开某种StreamReader并读取文件。 - Adam Rackis
1
这里没有使用ajax,而是使用UIAutomation框架 - Ian

0

这是Illuminator主机函数库中相当简单的一个函数:

function readFromFile(path) {
    var result = target.host().performTaskWithPathArgumentsTimeout("/bin/cat", [path], 10);

    // be verbose if something didn't go well
    if (0 != result.exitCode) {
        throw new Error("readFromFile failed: " + result.stderr);
    }
    return result.stdout;
}

如果您正在使用Illuminator,那么这个代码是host().readFromFile(path)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接