在 UIAutomation 中从 UIAElementArray 中按名称获取元素时遇到问题

Posted

技术标签:

【中文标题】在 UIAutomation 中从 UIAElementArray 中按名称获取元素时遇到问题【英文标题】:Trouble Getting Elements by Name from UIAElementArray in UIAutomation 【发布时间】:2012-02-20 16:55:12 【问题描述】:

我在 UIAutomation 脚本中按名称获取界面元素时遇到问题。

我已经为文本控件设置了辅助功能面板:

而且我知道我有正确的父视图,因为此代码将用于设置字段内容:

var view = UIATarget.localTarget().frontMostApp().mainWindow();
var textfields = view.textFields();
textfields[0].setValue("testuser");

不幸的是,如果我尝试按名称访问该字段,正如文档似乎表明我应该能够做到的那样,我会收到一个错误:

var view = UIATarget.localTarget().frontMostApp().mainWindow();
var textfields = view.textFields();
textfields['foo'].setValue("testuser");

无法对无效元素执行操作:UIAElementNil from target.frontMostApp().mainWindow().textFields()["foo"]

有人知道为什么按名称查找功能似乎对我不起作用吗?

感谢您的任何见解!

【问题讨论】:

添加来自 UIATarget.localTarget().frontMostApp().mainWindow().logElementTree() 的输出 【参考方案1】:

如果您正在使用可访问性层,则必须在设备/模拟器中启用它:

设置->常规->辅助功能->辅助功能检查器->开启

【讨论】:

【参考方案2】:

UI 自动化似乎在 Title 字段而不是记录在案的 Accessibility Label 字段中查找元素的名称;至少,这是我的经验。向您的 UI 元素添加标题(通过属性)应该会产生所需的行为。

更新:现在看来,经过进一步的实验,要编辑的字段可能是辅助功能标识符(不是标签),AFAICT 只能以编程方式设置。

【讨论】:

【参考方案3】:

根据UI Automation Reference Guide

UIAElementArray 部分,您可能想这样尝试:

var textfields = view.textFields();

textfields.withName("foo")[0].setValue("testuser");

【讨论】:

以上是关于在 UIAutomation 中从 UIAElementArray 中按名称获取元素时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

清除 UIAutomation 测试的钥匙串

如何处理 UIAutomation 中的文本通知?

在 UIAutomation 中使用accessibilityIdentifier 获取UIElement

在 Xcode Instruments 中,如何导入 UIAutomation 脚本?

如何在 iPhone 模拟器中工作的 UIAutomation 中获取 captureScreenWithName?

在设备上测试时出现scrollToVisible错误,UIAutomation