标签: frank

如何从命令行在Simulator中注册Touch ID?

我想从命令行在iOS模拟器中注册Touch ID,这样我就可以围绕授权运行一些自动UI功能测试.

我尝试了一些不起作用的东西:

  • xcrun simctl 没有Touch ID选项
  • 用于控制菜单的AppleScript无法正常工作,因为osascript没有可访问权限(我不喜欢这种侵入性的解决方法)
  • 我尝试在启动之前编辑模拟器的plist,但找不到合适的键值对

如果重要的话,我正在使用Frank和Cucumber进行测试.

xcode cucumber ios frank

11
推荐指数
1
解决办法
2017
查看次数

虽然Frankified app在设备上,但无法在设备上运行Frank测试

我已经完成了Ted对这个小组提供的指示.当我输入以下内容时,我的路径是.app:

./fruitstrap -d -b <full_path_to_your_xcode_project_directory>/Frank/frankified_build/<app_name>.app

看起来一切正常,它显示它正在将文件复制到设备,它达到49%,但后来我得到了这个:

 [ 52%] CreatingStagingDirectory
 [ 57%] ExtractingPackage
 [ 60%] InspectingPackage
 AMDeviceInstallApplication failed: -402653103
Run Code Online (Sandbox Code Playgroud)

我在网上搜索,我发现这个论坛,它说的是证书或配置文件是错误的.我有一个配置文件,我可以在设备上运行应用程序,而不是通过fruitstrap,所以我不相信我的配置文件有问题.

谢谢

---------更新---------

好的,我已经取得了一些进展.我仍然被卡住了,但现在这是我的问题.

如果我运行存储在这里的构建:

~/Library/Developer/Xcode/DerivedData/NameOfApp-blahblahblahblahblah/Build/Products/Debug-iphoneos/NameOfApp.app

我在"-------调试阶段-------"下得到"分段错误:11".这不是我的问题(至少还没有),因为这将在我的设备上运行.但我无法运行存储在此处的Frankified.app构建:

~/NameOfRepo/Frank/frankified_build/Frankified.app

这是我尝试运行时得到的(./fruitstrap -d -b ...):

 [ 70%] VerifyingApplication
 AMDeviceInstallApplication failed: -402620388
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索后,我发现这个数字意味着: Could not copy validate signature

我将不胜感激任何关于我可以尝试的建议.谢谢!

----------- -----------------更新

我检查了我的Frankified.app上的代码签名,如下所示:

 codesign -dvvv ./Frankified.app/
Run Code Online (Sandbox Code Playgroud)

并且看到它没有签名.所以我代码签署了Frankified.app构建,如下所示:

 codesign -v --sign "iPhone Distribution: Joe Developer" /path/to/app
Run Code Online (Sandbox Code Playgroud)

但我仍然得到这个:

 AMDeviceInstallApplication failed: -402620391 # This is a different error code than the others
Run Code Online (Sandbox Code Playgroud)

----------- -----------------更新

我将指定的体系结构更改为arm7 …

testing error-code ios frank ios-provisioning

9
推荐指数
1
解决办法
1449
查看次数

Xcode 8.3 (iOS 10.3) 无法启动模拟可执行文件

我的工作区有多个目标,其中之一是单元测试。

当我在 iOS 10.3 模拟器上从 Xcode 运行我的单元测试时,它们都通过了。但是,当我从命令行进行测试时,即xcodebuild <testtarget>测试间歇性失败。

以下是我在终端上看到的错误消息

xcodebuild[55631:340885] Error Domain=IDEFoundationErrorDomain Code=1 "Cannot launch simulated executable: no file found at /<Path>/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/<ProductName>"

这仅发生在 Xcode 8.3 而非早期版本中。我也设置xcode-select为 8.3.2

有人遇到过同样的问题吗?

frank swift3 xcode8 ios10.3

7
推荐指数
0
解决办法
619
查看次数

寻找一个体面的方案来使用原生的Objective-C和Mac技术实现验收测试环境

背景

我正在寻找一种方法来实现类似于Frank库用于实现"本机iOS应用程序的自动验收测试"的方案,但我希望这种方案依赖于原生的iOS/MacOSX技术.对不起,TLDR但它值得详细解释.

1.这里是弗兰克是如何工作的一个简短的概述:

它有客户端和服务器部件.

服务器部分嵌入到我们要运行验收测试的应用程序中.Frank教程向我们展示了如何创建应用程序主目标的重复目标,并将Frank HTTP服务器嵌入其中.

客户端部分 - 主要是运行纯文本场景的Cucumber:每个场景包含应针对应用程序运行的指令(填充文本字段,触摸按钮,确保页面上存在特定元素等...).此外,每个场景都会启动自己的app实例,这意味着每次进入新场景时都会提供一个新的状态.

客户端(Cucumber和Ruby-to-Objective-C桥接器)通过HTTP协议与服务器(嵌入到应用程序中的HTTP服务器)进行通信.它使用特殊约定,因此客户端可以告诉服务器应用程序应该执行的操作,以便可以执行特定方案.

2.最近,我发现弗兰克·皮特霍奇森的作者所写的以下文章:

http://blog.thepete.net/blog/2012/11/18/writing-ios-acceptance-tests-using-kiwi/

他建议更简单的方法为不喜欢依赖Cucumber和Ruby等外部工具的开发人员编写验收测试.让我自己引用作者:

在我开始之前,让我明确一点,我个人不会使用这种方法来编写验收测试.我更喜欢使用像ruby这样的高级语言来编写这些类型的测试.假设你对红宝石感到满意,那么测试代码的工作量就会减少,表达方式也会更具表现力.这就是我想尝试这个实验的原因.随着时间的推移,我和很多iOS开发人员谈过,他们不喜欢用红宝石编写测试.他们在Objective-C中比其他任何东西都更舒服,并且希望用他们用于生产代码的相同语言编写测试.很公平.

这篇博客文章激励我快速推出自己非常原始和原始的工具,这正是Pete在他的博客文章中所描述的:NativeAutomation.

实际上,就像Pete所描述的那样,可以通过使用放置在简单OCTests目标中的Kiwi/PublicAutomation设置来运行验收测试.我真的很喜欢它,因为:

  • 它只是纯粹的C/Objective-C.构建初始的C帮助程序很容易,看起来像Capybara帮助程序:

tapButtonWithTitle,fillTextFieldWithPlaceholder,hasLabelWithTitle等等......

  • 它不需要外部工具和语言:不需要使用Cucumber/Ruby或其他任何东西.NativeAutomation本身只使用Frank也使用的PublicAutomation.需要PublicAutomation来模拟应用程序屏幕上的用户交互:触摸,填充,手势......

  • 通过运行Cocoa Unit Tests包从Xcode运行这些测试非常方便.(虽然命令行构建也很容易).

问题

问题的Kiwi/PublicAutomation方法是将整个测试套件嵌入到应用程序包中.这意味着在每个场景运行后,在下一个场景开始执行之前,无法重置应用程序以强制它处于新鲜状态.解决此问题的唯一方法是Kiwi's beforeEach使用执行应用程序的软重置的方法编写钩子,如:

+ (void)resetApplication {
[Session invalidateSession];
[LocationManager resetInstance];

[((NavigationController *)[UIApplication sharedApplication].delegate.window.rootViewController) popToRootViewControllerAnimated:NO];

[OHHTTPStubs removeAllStubs];

cleanDatabase();

shouldEventuallyBeTrue(^BOOL{
    return FirstScreen.isCurrentScreen;
});
Run Code Online (Sandbox Code Playgroud)

但是在涉及网络,异步作业,核心数据,文件操作的应用程序的情况下,很难对先前场景留下的东西进行真正的拆解.

上面描述的问题使我思考是否有可能实现类似于Frank方法的更复杂的方法,第二个应用程序与主应用程序的捆绑包不同,并且不依赖于像Cucumber(Ruby)这样的外部工具.

以下是我如何看待它的完成方式.

除了主应用程序(MainApp)之外,还有第二个iOS(或Mac OS X)应用程序(AcceptanceTestsRunnerApp),它包含整个验收测试套件,并针对主应用程序包运行此套件:

它会在进入每个新场景之前启动新的模拟器实例,并针对当前模拟器的应用程序实例执行当前场景.


问题是:

我不太了解允许我这样做的Mac OSX或iOS技术:我不知道是否甚至可以设置可以控制主应用程序的Mac OS X/iOS应用程序(AcceptanceTestsRunnerApp) (MainApp)并针对它运行验收测试场景.

对于那些对使用原生Objective-C工具编写iOS应用程序验收测试的人感觉更舒服的人,我会感激不尽.


更新后来

...我确实阅读了一些关于XPC服务的文档,但具有讽刺意味的是,我正在寻找的方案应该与XPC文档建议的方案完全相反: …

macos automation ios frank

6
推荐指数
1
解决办法
509
查看次数

Frank对优胜美地的黄瓜试验导致了分离缺陷

我正在尝试使用XCode 6.1在Yosemite上运行Frank/Cucumber Framework.我已经按照说明如何通过以下方式安装和授权项目:

  • 宝石安装弗兰克黄瓜
  • 坦诚设置(在项目文件夹中)
  • 坦诚的建设
  • 坦率的发布

只有最后一部分失败并出现分段错误:

LAUNCHING APP...
sh: line 1: 15828 Trace/BPT trap: 5       /Library/Ruby/Gems/2.0.0/gems/sim_launcher-0.4.13/lib/sim_launcher/../../native/ios-sim "showsdks" 2>&1
sh: line 1: 15832 Segmentation fault: 11  /Library/Ruby/Gems/2.0.0/gems/sim_launcher-0.4.13/lib/sim_launcher/../../native/ios-sim "launch" "/Volumes/Project/CucuTest/Frank/frankified_build/Frankified.app" "--sdk" "--family" "iphone" "--exit" 2>&1
Run Code Online (Sandbox Code Playgroud)

我知道,需要为Apps 添加辅助功能,以便可以通过Apps控制计算机.在优胜美地,这已经改变,我无法将/ usr/bin/frank添加到列表中,但我添加了Terminal.app.这是问题还是我在错误的地方寻找.

这是我第一次使用Frank/Cucumber,所以我有点失落.非常感谢帮助.

objective-c cucumber frank swift osx-yosemite

5
推荐指数
1
解决办法
439
查看次数

原生和干净的黄瓜ios和mac实现

有些人已经找到了通过Calabash-iOS或Frank使用Cucumber和iOS的方式.

对我来说(这是一个个人观点,并不意味着每个人的情况都是一样的)我认为这不是最好的方法; 它不是原生的,它要求我或我的QA同事只为此目的学习一种新语言(Ruby); 它只限于UI.

它有自己的设置过程和依赖堆栈.

所以我开始为Objective-C和Swift寻找任何类似本机的Cucumber实现; 我仍然可以享受令人敬畏的黄瓜测试案例技术,同时用本地语言实现步骤,并以原生方式查看结果,如普通的XC测试用例.

但是,我没有找到像我一样的东西.

bdd cucumber ios frank calabash-ios

3
推荐指数
1
解决办法
673
查看次数