当前位置 : 主页 > 网络安全 > 测试自动化 >

自动化 – UIATarget.onAlert = function onAlert(alert)问题 – 脚本似乎没有正确进入块

来源:互联网 收集:自由互联 发布时间:2021-06-19
首先感谢您花时间阅读并希望在我的问题中提供一些煽动性.目前,我只是简单地尝试使用Instruments自动登录和注销我公司正在制作的应用程序.我遇到了一些小问题(正如你可以看到密码条
首先感谢您花时间阅读并希望在我的问题中提供一些煽动性.目前,我只是简单地尝试使用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();


}
我有这个问题,并最终发现自动化代码在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
}
网友评论