Fáb*_*ira 13 testing google-analytics objective-c ios ios-ui-automation
所以我有了这个想法,使用UI自动化在我的应用上测试我的屏幕跟踪(使用Google Analytics)的实现.
最初的想法是构建一个UI脚本来浏览屏幕,同时检查是否正在相应地发送跟踪事件.我需要这个,因为有时我无法从视图控制器中编写所有内容,或者事件不按预期顺序转发.无论如何,我应该测试我的应用程序的这个方面,我认为UI自动化是答案.
我已经使用UI自动化工具实现了一个脚本来浏览屏幕,这是正常的.我甚至使用了调整js来使代码更简化,更容易理解.我期待有类似的东西(一般来说,语法只是简化):
Being on screen X
Tap button A
Expect screen Y and tracking event for the screen Y
Run Code Online (Sandbox Code Playgroud)
但是,就我能够检查而言,测试屏幕跟踪是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]];
Run Code Online (Sandbox Code Playgroud)
在 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;
};
Run Code Online (Sandbox Code Playgroud)
这结合了等待警报和测试警报是否最终出现。如果警报未出现,则测试将失败。
在您的测试中,您可以按以下方式使用它:
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
Run Code Online (Sandbox Code Playgroud)
要实现此功能,您还需要设置一个 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
914 次 |
| 最近记录: |