我正在使用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生成可用的选项,但我无法想出点击或选择其中一个选项的方法。我不太确定我知道如何引用这些选项。
有没有人有任何想法?
谢谢!
答案 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);