使用仪器进行自动化 - 如何点击复制/粘贴按钮?

时间:2011-03-23 15:56:19

标签: ipad instruments ios-ui-automation

我正在使用Instruments进行iOS自动化,我似乎无法弄清楚如何点击复制/粘贴菜单上的选项。当我执行logElementTree()时,我看到我们返回一个UIEditingMenu然后返回三个元素(对应于该菜单的选项,例如复制/粘贴等)。我试图将它放入一个变量,然后尝试“点击”该变量,但我不能让它工作。以下是我的代码示例:

var target = UIATarget.localTarget();

var app = target.frontMostApp();

var window = app.mainWindow();

//This generates the highlighted text

app.dragInsideWithOptions({startOffset:{x:0.45, y:0.6}, endOffset:{x:0.45, y:0.6}, duration:1.5});

var copy = app.editingMenu.elements.withName("copyButton");

copy.tap();

Instruments returns, "0) UIAElementNil".  In addition to the above, I've also tried:

app.elements.withName("copyButton")

window.elements.withName("copyButton")

因此,我可以让editingMenu生成可用的选项,但我无法想出点击或选择其中一个选项的方法。我不太确定我知道如何引用这些选项。

有没有人有任何想法?

谢谢!

3 个答案:

答案 0 :(得分:1)

您应该尝试app.editingMenu().elements()[index].tap()其中index是您要从返回的元素数组中点击的选项的索引。我让我的工作方式。

答案 1 :(得分:0)

嘿。
首先,我总是使用.elements()而不是.elements ...但它是JS,所以它可能正在调用分配给对象属性的函数。?
无论如何,也许这个编辑菜单不是应用程序的内部窗口,但它是系统级菜单,当你进行拖动时调用它?如果是这样,请尝试:

UIATarget.localTarget().frontMostApp().elements().withName("copyButton").tap();

但正如我在apple reference中看到的那样,调用app.editingMenu()的版本应该没问题 也许尝试按位置调用按钮,您将看到响应:

UIATarget.localTarget().frontMostApp().editingMenu().elements()[0].tap;
UIATarget.localTarget().frontMostApp().editingMenu().elements()[1].tap;
UIATarget.localTarget().frontMostApp().editingMenu().elements()[2].tap;   

你应该通过这种方式找到正确的位置。当您拥有它的位置时,您可以通过button.logElement();检查其属性。有了这个inf,你应该能够切换回.withName方法而不是硬编码的位置。

答案 2 :(得分:0)

我这样做与yoosiba相似,但是使用了editMenu元素名称。 使用Xcode 4.5.1和运行iOS 6的设备。

将Alex Vollmer的优秀tuneup_js用于目标,应用和vtap()。 否则,您可以使用UIATarget.localTarget()。frontMostApp()和tap()。

注意:vtap()将延迟并重试点击。如果没有这个,您可能需要添加自己的延迟。

 // tap in textFieldA to see editingMenu.
 app.mainWindow().textFields()["textFieldA"].vtap();
 app.editingMenu().elements()["Select All"].vtap();
 app.editingMenu().elements()["Copy"].vtap();
 // must delay before attempting next tap
 target.delay(2);

 // ... navigate to different section of the app

 // tap in textFieldB to see editingMenu.
 app.mainWindow().textFields()["textFieldB"].vtap();
 // paste clipboard contents copied from textFieldA into textFieldB
 app.editingMenu().elements()["Paste"].vtap();
 target.delay(2);