You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apple Script捕获Mac桌面弹窗以解决iOS E2E测试阻塞

捕获Mac桌面弹窗的AppleScript解决方案

在iOS E2E测试过程中,测试常被Mac桌面弹窗阻塞,涉及的弹窗包括Java Access弹窗、Accessibility权限弹窗、系统属性弹窗及其他类型。原脚本仅能捕获Terminal、Google Chrome等常规窗口,无法检测到目标弹窗,以下是修正后的解决方案:

原脚本问题分析

  1. 过滤了background only is false的进程:很多系统/权限弹窗(比如Accessibility请求)属于后台进程,会被排除在外
  2. 窗口筛选范围过窄:仅匹配AXStandardWindow和AXDialog,但部分弹窗属于AXSheet类型,或者没有明确的subrole标记

修正后的AppleScript脚本

tell application "System Events"
    -- 不再过滤后台进程,覆盖所有进程
    set allProcesses to processes
    
    set dialogInfos to {}

    repeat with eachProcess in allProcesses
        try
            tell eachProcess
                -- 捕获所有可见的窗口,包括弹窗、表单、对话框
                set allWindows to windows where visible is true
                repeat with eachWindow in allWindows
                    set windowSubrole to subrole of eachWindow
                    -- 匹配常见弹窗类型的subrole,同时兼容无明确subrole的窗口
                    if windowSubrole is "AXDialog" or windowSubrole is "AXSheet" or windowSubrole is "AXStandardWindow" or windowSubrole is missing value then
                        set windowTitle to name of eachWindow as text
                        -- 排除空标题的系统元素(比如菜单栏图标)
                        if windowTitle is not equal to "" then
                            set the end of dialogInfos to {title:windowTitle, processName:(name of eachProcess as text), subrole:windowSubrole}
                        end if
                    end if
                end repeat
            end tell
        on error errMsg
            -- 忽略无权限访问的进程(比如系统核心进程)
            log "Skipped process " & (name of eachProcess as text) & ": " & errMsg
        end try
    end repeat
end tell

return dialogInfos

关键修改说明

  • 移除后台进程过滤:覆盖所有进程,确保捕获SecurityAgent、Java相关后台进程弹出的窗口
  • 扩展窗口匹配规则:加入AXSheet类型,并兼容无明确subrole的窗口,覆盖更多弹窗场景
  • 增加可见性检查:仅捕获当前显示的窗口,避免记录隐藏的后台窗口
  • 错误处理优化:跳过无权限访问的系统进程,避免脚本中断

使用说明

  1. 确保已给终端(或运行脚本的应用)开启辅助功能权限:
    • 打开「系统设置」→「隐私与安全性」→「辅助功能」
    • 勾选终端(或你用来执行脚本的应用)
  2. 执行命令:
    osascript get_popup_windows.scpt
    
    执行后会返回所有可见弹窗的标题、所属进程及subrole信息,包含你需要捕获的Java Access、Accessibility权限等弹窗。

内容的提问来源于stack exchange,提问作者Will Kuo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:20:16