2013-03-14 96 views
4

我跟随此网站开始使用UI自动化。 http://blog.manbolo.com/2012/04/08/ios-automated-tests-with-uiautomation#1.2从命令行启动仪器

我试图从命令行启动仪器。不幸的是我得到一个错误:

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

是安装在设备上的应用程序?仪器不会自动安装在设备上(至少现在不会)。你有'{appname}'作为参数。你不能只指定名称。您必须指定由Xcode构建的应用程序包的完整路径。 Instruments使用它来找出包标识符,以便知道要在设备上启动的应用程序。 – 2013-03-14 18:58:46

+0

哦,这个脚本在我的演示应用程序可能会有所帮助:https://github.com/jonathanpenn/ScheduleDemo/blob/master/test_run.sh – 2013-03-14 18:59:05

回答

0

我建议你看看乔纳森的屏幕射击游戏,他在下面解释:http://cocoamanifest.net/articles/2013/01/ui-screen-shooter.html。这真的帮助我了解了许多关于模拟器,从命令行运行仪器等等。像乔纳森解释的那样,你需要先构建应用程序,才能运行。

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

+0

网页已不复存在,但仍GitHub的... – Jonny 2013-06-13 07:15:47

+0

我固定的联系。 – Jelle 2013-06-14 21:07:47

0

这对我有用。

我做了ps命令来查看哪些进程正在运行。我发现乐器还在运行。然后,我做了killall instruments,并导致仪器过程中断。然后,我做了我的乐器指令,并在此之后完美奏效。

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 

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

+0

这不会在设备正常工作,将工作只为模拟器 – 2014-02-05 12:07:15

0

我有同样的问题,我做了以下修改和工作对我罚款:

改变在给定的命令-w UDID的位置,把它tracetemplate的路径之后和应用程序的路径,即前这应该是一样

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 
+0

这忽略-w参数,只是将启动对最近使用的模拟器的硬件。 – 2014-05-14 12:43:33

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 -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 Automation Runner脚本,它对Xcode 6.0.1和模拟器非常有效。