在iOS上使用UI自动化测试屏幕跟踪

前端之家收集整理的这篇文章主要介绍了在iOS上使用UI自动化测试屏幕跟踪前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有这个想法来测试我的应用程序使用UI自动化来实现我的屏幕跟踪(使用Google Analytics(分析)). @H_301_2@最初的想法是建立一个UI脚本来浏览屏幕,同时检查是否相应地发送跟踪事件.我需要这个,因为有时候我无法组合所有的视图控制器,或事件不按预期的顺序转发.无论如何,我也应该测试我的应用程序的这个方面,我认为UI自动化是答案.

@H_301_2@我已经使用UI自动化仪器实现了一个脚本来浏览屏幕,并且这个工作正常.我甚至使用tuneup js使代码更加精简,更容易遵循.
我期待有一些东西(一般来说,语法只是一个简化):

Being on screen X
    Tap button A
Expect screen Y and tracking event for the screen Y
@H_301_2@但是,只要我能够检查,测试屏幕跟踪是UI自动化不可能的.
还是我错过了什么?

@H_301_2@我想到创建一个不可见的视图,保持在所有的视图层次结构之上,并且每次加载新屏幕时都会更改其名称,以便我可以使用UI自动测试,但是这个想法听起来有点超过顶部…

@H_301_2@你们建议什么?寻找另一个UI自动化工具?做单位测试吗?

@H_301_2@提前感谢任何帮助

解决方法

您可以使用UIAlertView并检查这些警报.不必发送分析事件,您可以弹出警报,以便您可以在UIAutomation中进行检查. @H_301_2@像AnalyticsKit这样的分析抽象框架提供了一种改变分析提供者的简单方法.而AnalyticsKit甚至有一个例子(看看AnalyticsKitDebugProvider类).因此,您的生产代码的更改很少.

@H_301_2@您可以使用构建配置,您可以在其中设置构建变量来控制分析的初始化

id<AnalyticsKitProvider> provider
#ifdef USE_UI_AUTOMATION_ANALYTICS
provider = [[TestAutomationProvider alloc] init];
#else
provider = [[RealProvider alloc] initWithApiKey:API_KEY];
#endif

[AnalyticsKit initializeLoggers:@[provider]];
@H_301_2@在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;
};
@H_301_2@这结合了等待警报和测试,如果它终于出现.如果不出现警报,测试将失败.

@H_301_2@在您的测试中,您可以使用以下方式:

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
@H_301_2@为了使此工作,您还需要设置一个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

猜你在找的iOS相关文章