从命令行启动 Instruments

4
我遵循该网站以开始UI自动化。 http://blog.manbolo.com/2012/04/08/ios-automated-tests-with-uiautomation#1.2 我试图从命令行启动Instruments。不幸的是,我收到了一个错误:
2013-03-14 14:06:36.376 instruments[17854:1207] Connection to the remote device lost while launching target. Aborting...
2013-03-14 14:06:36.378 instruments[17854:1207] Recording cancelled : At least one target failed to launch; aborting run
Instruments Trace Error : Failed to start trace.

这是我使用的命令: instruments -w {deviceId} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate {appname} -e UIASCRIPT /Path/to/Script.js 目前我正在使用Xcode 4.6版本。

1
应用程序是否已安装在设备上?Instruments不会自动安装在设备上(至少目前不会)。而且你需要将{appname}作为参数。你不能只指定名称,必须指定由Xcode构建的应用程序包的完整路径。Instruments使用此路径来查找捆绑标识符,以便知道要在设备上启动哪个应用程序。 - Jonathan Penn
哦,而且我演示应用程序中的这个脚本可能会有所帮助:https://github.com/jonathanpenn/ScheduleDemo/blob/master/test_run.sh - Jonathan Penn
5个回答

5
在2014年使用Xcode 6.0.1时,在模拟器上运行UIAutomation测试,可以通过以下方式来命名你的模拟器:在-w开关后面添加相应名称。
instruments -t '/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate' \
    -w 'iPhone 5s' \
    '/Users/sohail/Library/Developer/CoreSimulator/Devices/7232A640-A9D2-4626-A2AD-37AFFF706718/data/Containers/Bundle/Application/E71B915E-051D-4BEF-9083-34416D02EC91/RoadRunnerRadar.app' \
    -e UIASCRIPT '/Users/sohail/Developer/clients/acme/roadrunnerradar/ACMERoadRunnerRadarAutomationTests/TestRunner.js' \
    -e UIARESULTSPATH '/Users/sohail/Developer/clients/acme/roadrunnerradar/ACMERoadRunnerRadarAutomationTests/TestResults/'

如果您希望在设备上运行此应用程序,而不是像我在上面模拟器中使用的“iPhone 5s”,则需要提供您设备的UDID。然后,您可以省略我上面提供的长应用路径,仅提供应用名称即可。Instruments将能够在设备上找到它。
以我上面的示例为例,但修改为一个假设的设备,它将如下所示:
instruments -t '/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate' \
    -w '8532A640-A9C2-4626-A2AD-37AFFF706799' \
    'RoadRunnerRadar' \
    -e UIASCRIPT '/Users/sohail/Developer/clients/acme/roadrunnerradar/ACMERoadRunnerRadarAutomationTests/TestRunner.js' \
    -e UIARESULTSPATH '/Users/sohail/Developer/clients/acme/roadrunnerradar/ACMERoadRunnerRadarAutomationTests/TestResults/'

这并没有经过设备调用验证,请测试一下。参数顺序有一定的灵活性。

我有一个经过验证的UI自动化运行器脚本,非常适合Xcode 6.0.1和模拟器。


0

我也遇到了同样的问题,但是我做了以下更改,对我来说很有效:

在给定命令中,将-w udid的位置更改为在tracetemplate路径之后、app路径之前,即应该像这样:

instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate -w {deviceId} {appname} -e UIASCRIPT /Path/to/Script.js

这将忽略-w参数,仅在最近使用的模拟器硬件上启动。 - David Snabel-Caunt

0

我建议你看一下Jonathan的屏幕截图工具,他在这里解释了:http://cocoamanifest.net/articles/2013/01/ui-screen-shooter.html。这真的帮助我了解了很多关于模拟器、从命令行运行工具等方面的知识。就像Jonathan所解释的那样,你需要先构建应用程序,才能运行。

在这里获取他的源代码:https://github.com/jonathanpenn/ui-screen-shooter,看看是否适合你。然后回到一个简单的脚本,将应用程序构建并放置在方便的位置,并使用应用程序和所需的模板运行工具。


0

试试这个

instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate  <path to your app> -e UIASCRIPT /Users/t-rbudhbhatti/Desktop/Scripts/FT5/SearchByRoute.js -e UIARESULTSPATH /Users/t-rbudhbhatti/Desktop/Scripts/FT5/SearchByRouteResult

你应该提供你的应用程序的完整路径,而不是应用程序名称。


这在设备上不起作用,只能在模拟器上运行。 - Mehul Thakkar

0

这对我有用。

我使用了ps命令来查看正在运行的进程。我发现instruments仍在运行。然后我执行了killall instruments,杀死了instruments进程。之后我再次执行我的instruments命令,一切都完美地运行了。


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