4

我使用 UIAutomation 来自动化 iPad 应用程序。我尝试使用 (object) performTaskWithPathArgumentsTimeout(path, args, timeout) 从我的脚本运行 Safari.app:

var target = UIATarget.localTarget();
var host = target.host();
var result = host.performTaskWithPathArgumentsTimeout("/Applications/Safari.app", ["http://www.google.com"], 30);
UIALogger.logDebug("exitCode: " + result.exitCode);
UIALogger.logDebug("stdout: " + result.stdout);
UIALogger.logDebug("stderr: " + result.stderr);

我得到以下结果: exitCode: 5 stdout: stderr:

我也尝试过启动回声:

var target = UIATarget.localTarget();
var host = target.host();
var result = host.performTaskWithPathArgumentsTimeout("/bin/echo", ["Hello
World"], 5);
UIALogger.logDebug("exitCode: " + result.exitCode);
UIALogger.logDebug("stdout: " + result.stdout);
UIALogger.logDebug("stderr: " + result.stderr);

结果:exitCode:0 标准输出:Hello World 标准错误:

因此,看起来 performTaskWithPathArgumentsTimeout 仅适用于特定应用程序。

请您帮我回答以下问题: 1. exitCode = 5 是什么意思?2. 使用 performTaskWithPathArgumentsTimeout 函数可以启动哪些进程?

4

1 回答 1

4

1) 退出代码 5 很可能是 EIO,定义见:输入/输出错误。您正在尝试执行“/Applications/Safari.app”,它对于启动任务是一个目录而不是二进制文件。

2) 您可以使用 NSTask 可以启动的 performTaskWithPathArgumentsTimeout() 启动任何应用程序。只要它是有效的可执行文件,它就应该可以工作。

但是,对于您的具体示例,Safari 不会接受在命令行上传递的参数作为要访问的 URL。您需要open /Applications/Safari.app "http://www.google.com"改用:

var result = host.performTaskWithPathArgumentsTimeout("/usr/bin/open", ["/Applications/Safari.app", "http://www.google.com"], 30);
于 2011-12-30T22:51:08.040 回答