【问题标题】:UIAutomation with Instruments - How to tap copy/paste buttons?UIAutomation with Instruments - 如何点击复制/粘贴按钮?
【发布时间】:2011-07-21 10:50:07
【问题描述】:

我正在使用 Instruments for 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 生成可用选项,但我无法找到一种方法来点击或选择其中一个选项。我不太确定我是否知道如何引用这些选项。

有人有什么想法吗?

谢谢!

【问题讨论】:

    标签: ipad instruments ios-ui-automation


    【解决方案1】:

    您应该尝试app.editingMenu().elements()[index].tap(),其中 index 是您要从返回的元素数组中挖掘的选项的索引。我的那个是这样工作的。

    【讨论】:

      【解决方案2】:

      嘿。
      首先,我一直使用.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 方法而不是硬编码位置。

      【讨论】:

      • 嗨 Yoosiba,非常感谢您抽出宝贵的时间做出回应。不幸的是,尽管有你的建议,我仍然无法让它工作。回到绘图板我去。
      【解决方案3】:

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

      使用 Alex Vollmer 出色的 tuneup_js 用于 target、app 和 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 2011-04-10
        • 2013-04-09
        • 2011-11-25
        相关资源
        最近更新 更多