在iOS模拟器上初始启动时关闭警报

时间:2014-12-02 17:28:58

标签: ios applescript alert ui-automation uiaccessibility

我正在为我的应用程序进行自动UI测试,并且在尝试设置运行测试的环境时遇到了麻烦。该计划大致如下:

  • 构建应用程序
  • 关机模拟器,如果正在运行
  • 擦除模拟器以进行全新安装
  • 在模拟器上安装我的应用
  • 运行UIAutomation测试

一切正常,除非仪器启动应用程序以执行测试,警报似乎会询问用户是否允许通知。这一切都符合预期,但我无法找到摆脱警报的方法。

我已经尝试过的事情:

  • 在我的测试脚本中首先创建onAlert,以防它出现在我的警报回调定义之前
  • 将目标延迟5秒,以防测试实际运行,甚至在模拟器中可见应用程序的用户界面之前

我也经历了可以在SO上找到的上述所有排列,无论我做什么,我都不会调用我的onAlert回调。所以我尝试的另一件事是:

  • 尝试使用applescript
  • 解除警报

我写的剧本:

tell application "System Events"
    tell process "iOS Simulator"
        set allUIElements to entire contents of window 1
        repeat with anElement in allUIElements
            try
                log anElement
            end try
        end repeat
    end tell
end tell

并显示:

static text “MyApp” Would Like to Send You Notifications of window iOS Simulator - iPhone 6 - iPhone 6 / iOS 8.1 (12B411) of application process iOS Simulator
static text Notifications may include alerts, sounds, and icon badges. These can be configured in Settings. of window iOS Simulator - iPhone 6 - iPhone 6 / iOS 8.1 (12B411) of application process iOS Simulator
UI element 3 of window iOS Simulator - iPhone 6 - iPhone 6 / iOS 8.1 (12B411) of application process iOS Simulator

看起来按钮位于“UI元素3”内部,但我无法从其中检索任何元素,更不用说单击它了。所以我查看了Accessibility Manager:

UI element 3 in Accessibility Manager

它作为一个孩子坐在那里,其他的是通知标题和消息。但当我转到那个元素时,会突出显示,我看到了:

enter image description here enter image description here

它被识别为通用元素,它没有任何孩子...... 有趣的是,当我在辅助功能检查器中选择“确定”按钮时,我实际上可以看到它是窗口的子项,但它从未列出:

enter image description here

有人可以了解这里发生的事情吗?如何在Applescript中按下该按钮?

2 个答案:

答案 0 :(得分:0)

如果您使用Instrument进行自动化,则需要注册回调(onAlert)以对警报执行任何操作。

但是你的问题是在你的脚本实际开始执行之前出现警报,那时警报没有注册回调。

因此,如果启动应用程序时警报可能会延迟大约10秒,那么只能处理它。但这只能通过源代码而不是自动化代码来控制。

因此,只有剩下的选项是您需要在安装新应用程序后手动关闭警报

我也面临同样的问题,发现它是工具的限制

此工具的限制太多,这就是为什么我转移到UFT

答案 1 :(得分:0)

我有类似的问题。我只想要警报上最后一个控件的位置。所以我提出了以下代码:

on get_simulator_last_object_rect(simulator_index)

tell application "System Events"
    set ProcessList to (unix id of processes whose name is "iOS Simulator")
    set myProcessId to item simulator_index of ProcessList
    tell window 1 of (processes whose unix id is myProcessId)

        -- Forcefully print the UI elements so that Accessibility hierarchy is built
        UI elements
        -- Then wait precisely to let the Accessibility view hierarchy is ready
        delay 0.5

        set lowest_label_lowest_position to 0
        set _x to 0
        set _y to 0
        set _width to 0
        set _height to 0

        repeat with element in UI elements

            set {_x, _y} to position of element
            set {_width, _height} to size of element
            set current_control_lowest_position to _y + _height

            if current_control_lowest_position > lowest_label_lowest_position then set lowest_label_lowest_position to current_control_lowest_position - _height / 2

        end repeat
        return {{_x, _y}, {_width, lowest_label_lowest_position}}
    end tell
end tell
end get_simulator_alert_ok_button_position

我有一个桌面应用来控制我的行为。我在桌面应用程序中使用此苹果脚本来获取最后一个控件的框架。现在我有了框架,我创建了一个鼠标事件,并在激活模拟器后执行了对框架的单击。

虽然我还没有尝试,但我很确定你可以从苹果脚本创建鼠标事件并执行点击帧的框架/中心。

希望这有帮助。

谢谢, RKS