首先感谢您花时间阅读并希望在我的问题中提供一些煽动性。目前,我只是简单地尝试使用Instruments自动登录和注销我公司正在制作的应用程序。我遇到了一些小问题(正如你可以看到密码条目,我通过char滚动char而不是使用字符串,因为奇怪的键入问题)。
问题是,当我将警报弹出到屏幕时,我想点击“注销”按钮。但是,似乎我从未进入应该处理警报的块。我可以推断出这是因为我在onAlert块中乱丢了logMessages,这些logMessages在运行测试脚本时没有出现在我的日志中。我知道默认处理程序只是解除任何警报,除非明确处理警报。我也相信我或至少试图明确处理该警报,以便我可以点击右键。
我做错了什么?我遵循了Apple Instruments指南,我相信我使用的语法完全相同。请在下面找到我的代码,我将所有代码都包含在内,但感兴趣的内容是最后的。
var target = UIATarget.localTarget();
var password = "something"
UIALogger.logStart("Test1");
target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].textFields()[0].tap();
target.frontMostApp().keyboard().typeString("something");
UIATarget.localTarget().delay(2);
target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].secureTextFields()[0].tap();
UIATarget.localTarget().delay(2);
for (i = 0; i < password.length; i++){
var strChar = password.charAt(i);
target.frontMostApp().keyboard().typeString(strChar);
}
target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].buttons()["Log in"].tap();
target.frontMostApp().mainWindow().tableViews()[0].cells()["Wipe data after 10 attempts"].staticTexts()["Wipe data after 10 attempts"].scrollToVisible();
target.frontMostApp().mainWindow().tableViews()[0].groups()["logout default"].buttons()["logout default"].tap();
// Alert detected. Expressions for handling alerts should be moved into the UIATarget.onAlert function definition.
UIALogger.logMessage("Just before alert");
UIATarget.onAlert = function onAlert(alert){
UIALogger.logMessage("In Alert!");
UIATarget.delay(1);
var title = alert.name();
UIALogger.logMessage("Alert with title '" + title + "' encountered!");
UIALogger.alert.logElementTree();
alert.buttons()["Logout"].tap();
}
答案 0 :(得分:3)
我遇到了这个问题,并最终发现自动化代码正在进入下一行,然后在模拟器中显示了UI(在本例中为警报视图)。 为了缓解这种情况,我在onAlert块之前添加了一个延迟,以允许显示警报视图。
UIATarget.localTarget().delay(3)
UIATarget.onAlert = function onAlert(alert){
var title = alert.name();
UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
target.frontMostApp().alert().cancelButton().tap();
return false; // use default handler
}
答案 1 :(得分:2)
你有一些错别字。
首先,您需要在执行测试代码之前定义警报处理函数。将其移至测试脚本的顶部。
其次,您对函数的定义和赋值稍有不正确。而不是:
UIATarget.onAlert = function onAlert(alert){
你应该有这个:
UIATarget.onAlert = function (alert){
最后,此警报处理程序仅适用于 iOS级别警报,例如权限弹出窗口。我在这里猜测,但alert.buttons()["Logout"].tap();
看起来像是你自己的应用程序正在创建的东西。你不需要为此提供警报处理程序;只需像在任何其他UI元素中一样在元素树中访问它,然后点击它。