在目标设备上读取 UIAutomation 的 UIAApplication.setPreferencesValueForKey() 设置的首选项?

Posted

技术标签:

【中文标题】在目标设备上读取 UIAutomation 的 UIAApplication.setPreferencesValueForKey() 设置的首选项?【英文标题】:Reading preferences set by UIAutomation's UIAApplication.setPreferencesValueForKey() on the target device? 【发布时间】:2011-02-12 11:01:03 【问题描述】:

在过去的几天里,我一直在使用 Apple 的 UIAutomation 框架,试图将一套验收测试放在一起,以推动我正在开发的应用程序的开发(以 BDD 类型的方式...... .)。

我遇到的一件事是如何让 SUT 进入给定状态,以便在需要设置一些内部状态以实现该状态时开始测试。问题是 Apple 的 javascript 环境除了通过它的 UI 之外没有提供任何我可以用来与设备通信的功能(我确信这可能是设计使然,但有时这只是不切实际):而像 iCuke 这样的解决方案或Frank 可以使用 HTTP 与嵌入在目标应用程序中的侦听服务器进行通信,以实现此类通信,在 Instrument 的 UIAutomation 环境中无法执行此类操作。

查看提供的 API,我注意到 UIAApplication 类中有一个函数允许我在目标设备 (see here for more details) 上设置首选项值:我想到我可以在设备上安装一些代码它可以使用 KVO 来寻找给定首选项键的机会,然后我可以使用它作为与目标应用程序中一些特殊的特定于测试的帮助代码进行通信的手段(在首选项的值更改时做出反应)。

我开始四处寻找是否可以完成这项工作,但遇到了一堵砖墙,因为我找不到从目标应用程序中访问 UIAutomation 设置的首选项的方法。问题是首选项似乎是在主机域级别设置的(即它们是在文件/Library/Preferences/com.mycompany.MyApp 中设置的),而不是在我的应用程序特定的沙盒/Library 文件夹中。

我确定我设置的首选项会影响设备 - 我可以看到上述文件中的值发生变化,但我找不到使用 NSUserDefaults 访问这些值的方法。

谁能解释我应该如何访问 ios 设备上存储在此级别 (NSLocalDomain...) 的首选项?

注意:我知道这完全是 hack,但不幸的是,Apple 现在提供的环境似乎远远达不到标准,所以我正在尽最大努力填补空白,而不是来自 Apple 的进一步更新。如果你在网上搜索一下,你会发现other people 有过非常相似的经历,并试图以类似的方式解决当前的缺陷。

更新:根据this thread,这可能是一个错误。不过,我无法确定这一点..

【问题讨论】:

这方面有什么进展吗? @l8nite:不要害怕——我已经选择了 iCuke,因为它更加成熟。可能值得一看,看看 Lion 中发生了多少变化 - 毫无疑问,他们会做出一些改变,也许还会添加一些功能。 我在 Lion 中玩弄了几秒钟,但没有取得任何进展,所以我最终也安装了 iCuke。 它仍然对我不起作用。可能相关:***.com/questions/10853180 【参考方案1】:

我也有类似的问题帖子here。

我使用自动化测试来运行我的应用程序的方式只是在实际的 iOS 设备(具体是 iPhone)中运行它。但是,我还发现 UIA 脚本中的 deactivate 之类的功能在真实设备上不起作用。由于某种原因,自动化无法找到应用程序按钮并重新进入应用程序。

希望对您有所帮助!

【讨论】:

以上是关于在目标设备上读取 UIAutomation 的 UIAApplication.setPreferencesValueForKey() 设置的首选项?的主要内容,如果未能解决你的问题,请参考以下文章

尝试在具有 IOS 8 和 Xcode 6 UIAutomation 的设备上运行脚本时出错

如何使用 Instruments UIAutomation 测试 iOS Web 应用程序

UIAutomation 和在滚动视图中读取静态文本

为啥 UIAutomation 看不到我视图中的按钮?

使用 UIAutomation 获取设备模型?

连接到 Mac 系统时,使用 Xcode UIAutomation 记录 ios 应用程序上的用户交互