用名称识别 UIAutomation 中的单元格

Posted

技术标签:

【中文标题】用名称识别 UIAutomation 中的单元格【英文标题】:Identifying a cell in UIAutomation with name 【发布时间】:2013-01-25 22:51:40 【问题描述】:

我正在尝试如何使用 UIAutomation 框架使用名称来识别表格视图中的单元格。这是乐器编辑器视图的屏幕截图。

我尝试了以下方法,但还没有成功。什么是正确或好的方法。通常 withName 是否适用于任何 UIAElement?

    mainWindow().withName("11:00 AM") target.frontMostApp().mainWindow().tableViews()[0].cells()1.tableViews()[0].cells()["11:00 am"]

请注意,使用硬编码位置标识元素是有效的。如下所示

target.frontMostApp().mainWindow().tableViews()[0].cells().tableViews()[0].cells()[2]

苹果文档中提到了withName - http://developer.apple.com/library/ios/#documentation/ToolsLanguages/Reference/UIAElementClassReference/UIAElement/UIAElement.html#//apple_ref/javascript/cl/UIAElement#withName

【问题讨论】:

【参考方案1】:

为澄清起见,UIAElement 上的 withName() 方法是一个测试元素是否具有该名称。如果是则返回元素,否则返回UIAElementNil

您想到的是UIAElementArray 上的withName(),它将元素数组的结果过滤为仅具有给定名称的那些。

您在窗口上调用了withName(),这不起作用。这些查询方法不会对元素树进行深度遍历来查找内容。您需要像在第 2 行中那样进行遍历。

不过,我不太确定它为什么坏了。看起来您正在正确遍历。我的预感是该名称可能隐藏了额外的空白字符或 unicode,而简单的字符串“11:00 am”不匹配。

我有几个建议来追踪这个问题。为您的内部表格视图创建一个中间变量。输入这些建议对我来说会更容易。

var innerTableView = target.frontMostApp().mainWindow().tableViews()[0].cells().tableViews()[0];

现在试试这两个建议,让我知道它说的是什么:

    记录第二个单元格名称的全文,看看是什么:UIALogger.logMessage("Name is '" + innerTableView.cells()[2].name() + "'"); 如果这不能帮助您解决问题,请尝试使用谓词匹配:innerTableView.cells().firstWithPredicate("name contains '11:00 am'").logElement();

当您运行其中任何一个建议时会发生什么?

【讨论】:

按照您的第一个建议并添加一个 for 循环,我能够找出问题所在。我打电话的时间不对。谢谢!

以上是关于用名称识别 UIAutomation 中的单元格的主要内容,如果未能解决你的问题,请参考以下文章

UIAutomation iOS - 删除表格单元格

根据命名范围/单元格分配值

如何为 tableViewController 中的自定义单元格按钮创建手势识别器,以便能够识别它所在的单元格?

无法识别单击单元格后的 tableView segue

识别 CollectionView 中的单元格

将工作表的选项卡名称链接到 Excel 中的单元格