因此,我有了这个想法,用UI自动化测试我的应用程序屏幕跟踪的实现(使用Google )。
最初的想法是构建一个UI脚本来通过屏幕,同时检查是否相应地发送跟踪事件。我需要这样做,因为有时我无法在视图之外编写所有控制器,或者事件没有按照预期的顺序转发。尽管如此,我也应该测试我的应用程序的这个方面,我认为UI自动化是答案。
我已经实现了一个脚本,通过屏幕使用UI自动化仪器,这是正确的工作。我甚至使用调音js使代码更加简化和易于理解。我本来希望有这样的东西(一般来说,语法只是一种简化):
Being on screen X
Tap button A
Expect screen Y and tracking event for the screen Y然而,就我所能检查的情况而言,用UI自动化测试屏幕跟踪是不可能的。还是我漏掉了什么?
我想要创建一个不可见的视图,在所有视图层次结构之上,每次加载新屏幕时都更改它的名称,以允许我使用UI自动化测试它,但是这个想法听起来有点过头了……
你们这些人有什么建议?寻找另一个UI自动化工具?用单元测试代替吗?
提前感谢您的帮助
发布于 2014-04-13 20:26:29
您可以使用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中,您可以测试即将出现的警报。您可以利用assertions.js从tuneup.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 handlerhttps://stackoverflow.com/questions/22911649
复制相似问题