在许多 Mac 上运行 UIAutomation 脚本?

问题描述 投票:0回答:1

我可以在我使用的 Mac 上很好地创建和重播以下脚本。

当我在另一台Mac上运行上述脚本时,它在第三行显示错误。 将上面脚本的第三行更改如下后,它可以正常重播。

  target.frontMostApp().mainWindow().tableViews()[1].textFields()[0].tap();

我只是将tableview的索引从0更改为1。我怎样才能在多个中实现这一点 mac系统?两台 mac 都有相同的 xcode 版本(xcode 5)和模拟器版本(6.1)和 mac 版本。为什么 Instruments 在不同的 mac 中采用不同的脚本 API?

ios xcode xcode5 ui-automation ios-ui-automation
1个回答
1
投票

为了获得更一致的结果,方法之一是通过名称(或其他标识符/预期内容/包含的单元格数量等)访问 AX 元素。例如,这里Trouble Getting Elements by Name from UIAElementArray in UIAutomationSO问题以及关于如何以不同方式设置元素名称的相应讨论。

例如:

var mainWindow = UIATarget.localTarget().frontMostApp().mainWindow();
var tableViews = mainWindow.tableViews();
tableViews['TableView'].textFields()[0].tap();

var mainWindow = UIATarget.localTarget().frontMostApp().mainWindow();
var tableViews = mainWindow.tableViews();
tableViews['TableView'].textFields.withName("TextFieldName")[0].tap();

如果使用名称不可行,可以分析表格的内容,并根据该表格选择正确的表格。例如,如果表中有一些名为“单元格名称”的单元格:

var mainWindow = UIATarget.localTarget().frontMostApp().mainWindow();
var tableViews = mainWindow.tableViews();
if (tableViews[0].cells().firstWithName("Cell name")) {
    tableViews[0].textFields()[0].tap();
} else if (tableViews[1].cells().firstWithName("Cell name")) {
    tableViews[1].textFields()[0].tap();
}

有关识别 tableView 中的单元格的更多详细信息,例如问题 UIACollectionView cells vsvisibleCells 这看起来不太好,但它可能是合理的解决方法,并且应该工作得相当可靠。如果这些表中的单元格数量已知并且不同,则可以比较单元格数量以找到所需的表格。

© www.soinside.com 2019 - 2024. All rights reserved.