所以我有这个想法来测试我的应用程序使用UI自动化来实现我的屏幕跟踪(使用Google Analytics(分析)).
最初的想法是建立一个UI脚本来浏览屏幕,同时检查是否相应地发送跟踪事件.我需要这个,因为有时候我无法组合所有的视图控制器,或事件不按预期的顺序转发.无论如何,我也应该测试我的应用程序的这个方面,我认为UI自动化是答案.
我已经使用UI自动化仪器实现了一个脚本来浏览屏幕,并且这个工作正常.我甚至使用tuneup js使代码更加精简,更容易遵循.
我期待有一些东西(一般来说,语法只是一个简化):
Being on screen X Tap button A Expect screen Y and tracking event for the screen Y
但是,只要我能够检查,测试屏幕跟踪是UI自动化不可能的.
还是我错过了什么?
我想到创建一个不可见的视图,保持在所有的视图层次结构之上,并且每次加载新屏幕时都会更改其名称,以便我可以使用UI自动测试,但是这个想法听起来有点超过顶部…
你们建议什么?寻找另一个UI自动化工具?做单位测试吗?
提前感谢任何帮助
解决方法
您可以使用UIAlertView并检查这些警报.不必发送分析事件,您可以弹出警报,以便您可以在UIAutomation中进行检查.
像AnalyticsKit这样的分析抽象框架提供了一种改变分析提供者的简单方法.而AnalyticsKit甚至有一个例子(看看AnalyticsKitDebugProvider类).因此,您的生产代码的更改很少.
您可以使用构建配置,您可以在其中设置构建变量来控制分析的初始化
id<AnalyticsKitProvider> provider #ifdef USE_UI_AUTOMATION_ANALYTICS provider = [[TestAutomationProvider alloc] init]; #else provider = [[RealProvider alloc] initWithApiKey:API_KEY]; #endif [AnalyticsKit initializeLoggers:@[provider]];
在UIAutomation中,您可以测试警报.您可以使用tuneup.js包中的assertions.js来编写一个这样的函数
function checkForAlert() { var alert = null; retry( function() { log("wait until alert appaers"); alert = UIATarget.localTarget().frontMostApp().alert(); assertNotNull(alert,"No alert found"); assertTrue("The name you can choose for the alert" == alert.name()); },5,1.0); return alert; };
这结合了等待警报和测试,如果它终于出现.如果不出现警报,测试将失败.
在您的测试中,您可以使用以下方式:
var analyticAlert = checkForAlert() // if alert appears it will be in the var,otherwise the test fails at this point. analyticAlert.buttons()["OK"].tap(); // dismiss the alert
为了使此工作,您还需要设置一个onAlert处理程序.否则,UIAutomation会尝试立即关闭警报.这必须在您的测试代码之前完成.警报处理在UIAutomation文档中解释.
function MyOnAlertHandler(alert) { if("The name you choose"==alert.name()) // filter all alerts created by analytics provider { return true; // handle alert in your test } return false // automaticly dismiss all other } UIATarget.onAlert = MyOnAlertHandler; // set the alert handler