Xcode 7 UITesting 用于 OS X 上的菜单栏应用程序

Posted

技术标签:

【中文标题】Xcode 7 UITesting 用于 OS X 上的菜单栏应用程序【英文标题】:Xcode 7 UITesting for menu bar apps on OS X 【发布时间】:2015-08-28 15:01:22 【问题描述】:

我正在尝试将 XCode 7 UITesting 用于 Dropbox 等菜单栏应用程序,Mac OS X 上的 1Password。这是否可以使用 Xcode 7 提供的最新功能自动化 UI 测试?我了解 UI 测试适用于 ios 应用程序,但演示从未在视频中显示它是否适用于操作系统应用程序。如果它适用于 OS X 应用程序,但它适用于菜单栏应用程序吗?请指导我解决这个问题。

【问题讨论】:

我遇到了同样的问题。您可以 UI 测试 OSX 应用程序,但如果您在 Info.plists 上启用“应用程序是代理 (UIElement)”选项,则 XCUIApplication().launch() 将停止工作。有什么想法吗? 【参考方案1】:

受此答案的启发,我找到了解决此问题的更好方法:https://***.com/a/5384319/96737

与其从 Info.plist 中删除 Dock 功能,不如以编程方式将应用程序的“激活策略”设置为“附件”。

通过 Xcode 8.1 在 swift3 中:

func applicationDidFinishLaunching(_ aNotification: Notification) 
    NSApp.setActivationPolicy(NSApplicationActivationPolicy.accessory)

最大的好处是它无需修改即可在运行时和 UI 测试中工作。您无需根据是否在 UI 测试中运行应用程序来激活或停用激活策略。

它只是工作。

【讨论】:

【参考方案2】:

我意识到这个问题很老了,但想分享我的答案。

我创建了一个 Info.plist 文件的副本,其中 LSUIElement 设置为 NO。然后我创建了一个新的“UITesting”配置并将其INFOPLIST_FILE 构建设置指向副本。更好的选择是创建用户定义的构建设置,然后将该设置的值分配给 LSUIElement,但 Xcode 不允许使用布尔值。

设置好 UITesting 配置后,您可以编辑方案以在测试期间使用此配置。

【讨论】:

有点混乱。你能分步详细说明吗

以上是关于Xcode 7 UITesting 用于 OS X 上的菜单栏应用程序的主要内容,如果未能解决你的问题,请参考以下文章

入口点 (_main) 未定义。对于架构 x86_64 - 仅 XCode UITesting

如何从 Mac OS X 10.7.3 卸载 XCode 4.3.1?

Xcode Bots 从单个 Xcode 服务器在多个 iOS 项目上运行 UITesting

XCode UITesting Issue TrackList

Xcode 7 支持 watch OS1 和 OS2

XCode7 UITesting - 如何添加从 UITestCase 可用的主要目标类(未定义符号错误)?