【问题标题】:How to fetch file content (basically read) a local file in javascript for UIAutomation iOS如何在 javascript 中为 UIAutomation iOS 获取文件内容(基本上是读取)本地文件
【发布时间】:2013-11-15 06:42:54
【问题描述】:

有没有一种方法可以在 JavaScript 中读取本地文件。

我的文件夹:

     db.csv

     Parse.js

试图在 Parse.js 中获取文件 db.csv 的内容,但没有成功。

您能否分享一些链接,我可以从中获得足够的知识来阅读文件。 在 Xcode5 中运行 Instruments,在 .js 文件中使用测试脚本,我必须从 .csv 文件中输入一些值。

【问题讨论】:

  • 你能分享一下你到底尝试了什么,什么失败了。 快速回答: 如果您在浏览器中执行 JavaScript,则无法从 本地计算机 读取文件。浏览器不允许这样做。
  • @gideon 和 Maverick,这是关于 Apple 用于 iOS 测试的 UIAutomation 框架的问题,该框架(虽然是用 Javascript 编写的)提供了对主机 shell 的访问。

标签: javascript file-io ui-automation ios-ui-automation


【解决方案1】:

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://stackoverflow.com/a/19016573/344798

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

【讨论】:

    【解决方案2】:

    如果该文件与您所在的站点位于同一个域中,您将使用 Ajax 加载它。如果您使用的是 Ajax,则类似于

    $.get('db.csv', function(csvContent){
        //process here
    });
    

    请注意,csv 文件的路径将与您所在的网页相关,而不是 JavaScript 文件。

    如果您不使用 jQuery,则必须手动使用 XmlHttpRequest 对象来执行 Ajax 调用。

    虽然您的问题没有(似乎)处理它,但如果文件位于不同的域中,那么您必须使用 jsonP 或 CORS。

    而且,如果这是您的目标,不,您不能,在 客户端 JavaScript 打开某种流并读取文件。那将是一个巨大的安全漏洞。

    【讨论】:

    • @Adam,感谢您的快速帮助。现在我没有使用 Ajax,如果你知道的话,请告诉我是否可以使用 javascript。欢迎任何有关相同的意见。
    • @coder284 你的问题不是很清楚。您是在服务器上运行 javascript,在浏览器上,您是要读取本地文件还是从服务器返回的文件?
    • @coder284 - 绝对不是。您无法打开某种 StreamReader 并在客户端 JavaScript 中读取文件
    • 这里没有ajax,这是UIAutomation framework
    【解决方案3】:

    这是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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2012-02-17
      • 2017-06-05
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多