[ios]在许多 mac 运行 UIAutomation 脚本吗?

标签: Xcode ios
发布时间: 2017/3/27 18:58:30
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我可以创建并重播以下脚本很好在我使用的苹果电脑。

  var target = UIATarget.localTarget();

  UIATarget.localTarget().delay(15);

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

当我在另一个 mac 运行上面的脚本时,它会显示在第三条线的错误。 更改后上面的脚本如下所示的第三行,它重放好。

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

只是我有表的索引从 0 更改为 1。在多个 mac 系统中,如何能做到这一点?这两个 mac 有相同 xcode 版本 (xcode 5) 和模拟器 version(6.1) 和 mac 版本。为什么文书正在脚本 API 以不同的方式在不同 mac 吗?

解决方法 1:

对于更一致的结果的方法之一可以访问 AX 元素按名称 (或其他标识符/预期内容/包含单元格数目等.)。例如在这里问题得到元素按名称从 UIAElementArray UIAutomation所以问题和相应的讨论,关于如何命名元素可以以不同的方式设置。

例如︰

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();
}

有关标识,例如在UIACollectionView 细胞 vs visibleCells等问题表的单元格的更多详细信息这看起来不很漂亮,但它可以很合理的解决方法,应相当可靠。如果细胞数目都知道,不同在这些表中,而不是可以比较的单元格数目,找到所需的表。

赞助商