仪器自动化:logFail / logPass取决于警报

时间:2014-07-22 12:29:56

标签: instruments ui-automation ios-ui-automation

我是iOS UI Automation的新手。我想通过或不通过测试,具体取决于是否显示警报。所以,到目前为止它看起来像:

#import "onAlert.js"
function run_testLogin(target) {
    UIALogger.logStart("Test-Login");
    var window = target.frontMostApp().mainWindow();
    window .scrollViews()[0].buttons()["Log in"].tap();
    app.alert();
}

所以现在我要“UIALogger.logPass(”登录成功“);”或者UIALogger.logFail(“登录失败”);“取决于是否显示过警报。我该如何实现?

3 个答案:

答案 0 :(得分:1)

尝试使用类似这样的警告处理程序

        UIATarget.onAlert = function onAlert(alert){
            var title = alert.name();

            if (title == "some alert title"){
                UIALogger.logFail("Login failed");
                return true;
            }
            UIALogger.logPass("Login successfully");
            return false;
        }

您可以获取警报的名称(如上所示),然后在其中失败/传递。

您应该在点击登录按钮后立即插入处理程序

答案 1 :(得分:1)

尝试这样的事情就像使用其他答案所示的警报处理程序,但以不同的方式处理警报。尝试类似:

UIATarget.onAlert = function onAlert(alert)
{
    var title = alert.name();
    if (title == "Alert name you're looking for")
    {
        UIALogger.logPass("Test successful");
    } else if (title == "Alert name that means login was unsuccessful")
    {
        UIALogger.logFail("Test failed");
    } else
    {
        // The alert is from something else and may not be a failure
        UIALogger.logIssue("Unexpected alert");
    }
}

现在,根据警报的内容,您将根据显示的警报更改要执行的操作。如果您可以自动按下默认按钮,那么return false。否则,按下(UIATarget.localTarget().frontMostApp().alert().buttons())和return true按钮。

这应该在代码中早于触发警报的操作。

编辑:如果您担心警报标题冲突,那么您可以尝试这样的事情:

this.alertHandler = 
{
    alerts: 
    {
        defaultCase: function(alert)
        {   
            var baseScreen = new BaseScreen();
            baseScreen.app().alert().defaultButton().tap();
            return true;
        }
    },
    pushAlert: function(title, func)
    {
        dev.alertHandler.alerts[title]=func;
    },
    popAlert: function(title)
    {
        delete dev.alertHandler.alerts[title];
    }   
};

然后你的onAlert看起来像是:

UIATarget.onAlert = function(alert)
{
    if(alert.name() in Device.alertHandler.alerts)
    {
        return Device.alertHandler.alerts[alert.name()](alert);
    } else
    {
        return Device.alertHandler.alerts.defaultCase(alert);
    }
};

您可能需要改为使用数组,以便推送和弹出在语义上是正确的,但我还没有找到一个案例,我需要一个警报处理程序以外的单一警报处理程序,所以我没有打扰额外的编程功能。

答案 2 :(得分:0)

所以最后我最终检查点击它后是否仍然显示登录按钮。所以我的功能看起来像那样:

#import "onAlert.js"
function run_testLogin(target) {

    UIALogger.logStart("Test-Login");
    var window = target.frontMostApp().mainWindow();
    var loginButton = window .scrollViews()[0].buttons()["Log in"];

    loginButton.tap();

    app.alert();
    target.delay(1);

    if (loginButton.isVisible())
        UIALogger.logFail("Login failed");
    else
        UIALogger.logPass("Login successfully");
}

我现在唯一关心的是登录过程是否花费太长时间..