UIAutomation 跳线

UIAutomation skipping lines

即使我延迟很长时间,UIAutomation 也没有做任何事情,这让我很难过。在下面的代码片段中,UIALogger.logWarning("Alert with title ’" + title + "’ encountered!"); 没有被记录,但是点击发生后立即发生。

有时会打印所有 3 条测试消息,但通常只打印前两条。

如您所见,我已尝试添加延迟并测试消息。

UIALogger.logMessage("Tap Signup button");
var signupButton = window.buttons()["Signup Button"];
if (signupButton.checkIsValid())
{
    signupButton.tap();
    UIALogger.logMessage("test message");
    target.delay(3);
    if (app.alert())
    {  
        target.delay(3);
        UIALogger.logMessage("test message 2");
        UIATarget.onAlert = function onAlert(alert) 
        {
            target.delay(10);
            UIALogger.logMessage("test message 3");
            var title = alert.name();
            UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
            alert.buttons()[0].tap();
        }
    }
    target.delay(1);
}
else
{
    UIALogger.logError("Signup Button not found");
}

我有这个完全相同的代码:

    UIATarget.onAlert = function onAlert(alert) 
    {
        var title = alert.name();
        UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
        alert.buttons()[0].tap();
    }

在其他地方,它没有问题。我真的不知道发生了什么。你呢?

这里的问题是您的警报处理程序是在警报触发后设置的。您看到所有三条消息出现的时间可能是在应用程序中已触发警报并被先前的警报处理程序捕获之后。您要做的是在使用之前声明您的警报处理程序。我对您的建议是将此作为在导入语句之后执行的第一个代码。警报随时可能发生,最好尽快让您的处理程序到位,以避免由竞争条件引起的奇怪行为。

如果您自己解除警报,您还需要 return true,否则 Instrument 会在您的处理程序 return 之后尝试点击按钮,即使它不再存在。这将在自动化中导致错误 and/or 奇怪的行为。