javascript - iOS UI 自动化 : Handling two alertViews, 其中一个触发另一个

标签 javascript instruments ios-ui-automation alertview

这是我正在尝试做的事情。

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

关于javascript - iOS UI 自动化 : Handling two alertViews, 其中一个触发另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157793/

相关文章:

iphone - 分析,泄漏工具导致仪器崩溃

iPhone:学习资源 'instruments' ?

iphone - Instruments 的内存泄漏工具是否存在 'for' 循环问题?

ios - 使用 iPhone 5.0 模拟器的 UI 自动化调试消息

javascript - 如何从 iOS UI Automation JavaScript 对外部 jar 文件进行 API 调用

javascript - Sails.js Node 服务器 req.session 始终为空,使用 Passport-local 策略。

c# - 强制加载整页

ios - 如何检测我的功能测试在哪个 iOS 设备上运行?

javascript - 匿名 JavaScript 函数的括号

javascript - 如何在嵌入中调用 .username 属性? (不和谐.js)