首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS上用UI自动化测试屏幕跟踪

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

Stack Overflow用户
提问于 2014-04-07 11:52:13
回答 1查看 1.1K关注 0票数 13

因此,我有了这个想法,用UI自动化测试我的应用程序屏幕跟踪的实现(使用Google )。

最初的想法是构建一个UI脚本来通过屏幕,同时检查是否相应地发送跟踪事件。我需要这样做,因为有时我无法在视图之外编写所有控制器,或者事件没有按照预期的顺序转发。尽管如此,我也应该测试我的应用程序的这个方面,我认为UI自动化是答案。

我已经实现了一个脚本,通过屏幕使用UI自动化仪器,这是正确的工作。我甚至使用调音js使代码更加简化和易于理解。我本来希望有这样的东西(一般来说,语法只是一种简化):

代码语言:javascript
复制
Being on screen X
    Tap button A
Expect screen Y and tracking event for the screen Y

然而,就我所能检查的情况而言,用UI自动化测试屏幕跟踪是不可能的。还是我漏掉了什么?

我想要创建一个不可见的视图,在所有视图层次结构之上,每次加载新屏幕时都更改它的名称,以允许我使用UI自动化测试它,但是这个想法听起来有点过头了……

你们这些人有什么建议?寻找另一个UI自动化工具?用单元测试代替吗?

提前感谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-13 20:26:29

您可以使用UIAlertView并检查这些警报。与发送分析事件不同,您可以弹出警报,以便在UIAutomation中检查它。

AnalyticsKit这样的分析抽象框架提供了一种简单的方法来改变分析提供者。AnalyticsKit甚至有一个这样的例子(看看AnalyticsKitDebugProvider类)。因此,对生产代码的更改是最小的。

您可以使用构建配置来设置生成变量来控制分析的初始化。

代码语言:javascript
复制
id<AnalyticsKitProvider> provider
#ifdef USE_UI_AUTOMATION_ANALYTICS
provider = [[TestAutomationProvider alloc] init];
#else
provider = [[RealProvider alloc] initWithApiKey:API_KEY];
#endif

[AnalyticsKit initializeLoggers:@[provider]];

在UIAutomation中,您可以测试即将出现的警报。您可以利用assertions.js从tuneup.js包中编写这样的函数

代码语言:javascript
复制
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;
};

这结合了等待警报和测试(如果它最终出现)。如果未出现警报,则测试将失败。

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

代码语言:javascript
复制
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文档中解释了警报处理。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22911649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档