Javascript iOS UI自动化:处理两个AlertView,其中一个触发另一个

Javascript iOS UI自动化:处理两个AlertView,其中一个触发另一个,javascript,instruments,ios-ui-automation,alertview,Javascript,Instruments,Ios Ui Automation,Alertview,这就是我要做的 1) 我有一个alertView,它会问“你在哪里购物?”。此警报有两个按钮:跳过/取消和继续。 2) 单击“跳过”按钮,它会弹出另一个标题为“附近列表”的alertView,并显示附近商店的tableView列表,用户可以从中选择任何商店。这个只有一个取消按钮。(取消按钮解除警报并返回主页) 我的问题是每当我试图像这样绕过默认处理程序时 UIATarget.onAlert = function onAlert(alert) { var title = a

这就是我要做的

1) 我有一个alertView,它会问“你在哪里购物?”。此警报有两个按钮:跳过/取消和继续。 2) 单击“跳过”按钮,它会弹出另一个标题为“附近列表”的alertView,并显示附近商店的tableView列表,用户可以从中选择任何商店。这个只有一个取消按钮。(取消按钮解除警报并返回主页)

我的问题是每当我试图像这样绕过默认处理程序时

    UIATarget.onAlert = function onAlert(alert) {
        var title = alert.name();
        UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
        if (title == "Where are you shopping?") {
            alert.buttons()["Skip"].tap();
            return true; // bypass default handler
        }
        return false; 
        }
点击跳过按钮,第二个警报弹出,第二个警报上点击默认按钮,即使我没有为此编写任何代码

我想点击第一个警报的跳过按钮,然后点击第二个警报的其中一个单元格。因此,我尝试了下面的代码,但它仍然会在不点击手机的情况下解除第二个警报。不知道怎么做。我是一个初学者,所以非常感谢任何帮助

    var target = UIATarget.localTarget();
    var app = target.frontMostApp();
    var window = app.mainWindow();
    var testName = "Test 1";

    UIALogger.logStart(testName);


    var buttonScan = target.frontMostApp().windows()[0].buttons()["scan btn"];
    //UIATarget.localTarget().pushTimeout(1);

    target.delay(1);

    //app.logElementTree();

    if (buttonScan.isValid()) {
  buttonScan.tap();

  // first alert box "Where are you shopping"
  UIATarget.onAlert = function onAlert(alert) { // this is never called
      var title = alert.name();
      UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
      if (title == "Where are you shopping?") {
          alert.buttons()["Skip"].tap();
      return true; // bypass default handler
      }
  return false; 
}

// second alert box "Nearby listings:"
UIATarget.onAlert = function onAlert(alert) {
    var title = alert.name();
UIALogger.logMessage( "Dismiss the keyboard" + title );
    UIALogger.logWarning("Alert2 with title ’" + title + "’ encountered!");
    if (title == "Nearby listings:") {

        return true; // bypass default handler
    }
    return false; // use default handler that is dismissing the alert
   }


      UIALogger.logPass(testName);


   } else {

        UIALogger.logFail(testName);

    }

在使用
UITarget
实例之前,请尝试设置
onAlert
处理程序

例如:

// first alert box "Where are you shopping"
UIATarget.onAlert = function onAlert(alert) { // this is never called
      var title = alert.name();
      UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
      if (title == "Where are you shopping?") {
          alert.buttons()["Skip"].tap();
          return true; // bypass default handler
      }
  return false; 
}
    var target = UIATarget.localTarget();
    var app = target.frontMostApp();
    var window = app.mainWindow();
    var testName = "Test 1";

    UIALogger.logStart(testName);

    var buttonScan = target.frontMostApp().windows()[0].buttons()["scan btn"];
    //UIATarget.localTarget().pushTimeout(1);

    target.delay(1);
    //app.logElementTree();

    if (buttonScan.isValid()) {
  buttonScan.tap();

   //alert should happen here

您是否已验证正在调用您的
onAlert
处理程序?引用Apple文档,如果未指定警报或处理程序返回false,它将尝试单击
cancel
。在您的情况下,如果条件语句都为true或false,您将单击cancel。因此,请确保您确实可以在第一个警报上单击“继续”按钮。@ekims感谢您的回复。对我来说,预期的行为是,当我单击“跳过”(第一个警报的“取消”按钮)时,第二个警报应该会显示,其中包含一个表视图。现在,在第二个警报中,我想选择一个单元格(产品列表),将我带到另一个屏幕。我只是建议您尝试并单击第一个警报上的
继续
按钮,以确保您的警报处理程序在第一个场景中工作。因为如果未指定警报处理程序,则默认为“取消”按钮。这将帮助我们缩小问题可能发生的范围。@ekim你是对的。谢谢你的建议。现在我知道第一个警报也不起作用了。你能告诉我第一个警报有什么问题吗?另外,无论点击哪个按钮(跳过或继续),第二个警报都会出现。我发现第一个警报在跟踪日志中不起作用,因为它没有显示日志警告消息。救命啊!!!嘿,它现在可以工作了(通过将onAlert移到顶部)。我上次试的时候漏掉了一句话。非常感谢你,伙计。你帮我省下了更多的痛苦。我很想在下一次投资中与你联系。没问题。我已经在一些工作项目中使用过它,我很高兴在可能的时候提供帮助。