UIAutomation with Instruments - Как нажимать кнопки копирования / вставки? - PullRequest
2 голосов
/ 23 марта 2011

Я использую инструменты для автоматизации 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")

Итак, я могу получить меню редактирования для создания доступных параметров, но не могу найти способ нажать или выбрать один из этих параметров.Я не совсем уверен, что знаю, как ссылаться на эти опции для начала.

У кого-нибудь есть идеи?

Спасибо!

Ответы [ 3 ]

1 голос
/ 18 мая 2012

Вы должны попробовать app.editingMenu().elements()[index].tap(), где index - это индекс опции, которую вы хотите нажать из возвращенного массива элементов.У меня так работает мой.

0 голосов
/ 08 октября 2012

Я сделал это похоже на yoosiba, но с именами элементов editMenu. Использование Xcode 4.5.1 и устройства под управлением iOS 6.

Использование отличного 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);
0 голосов
/ 24 марта 2011

Эй.
Прежде всего, я всегда использовал .elements(), а не .elements ... но это JS, так что это может быть вызывающая функция, которая присваивается свойству объекта ..?
В любом случае, может быть, это меню редактирования не является внутренним окном приложения, а меню системного уровня, которое вызывается, когда вы выполняете перетаскивание? Если это правда, попробуйте:

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

Но, как я вижу в справочнике по яблоку ваша версия с вызовом 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();. С помощью этой информации вы сможете вернуться к методу .withName вместо жестко закодированной позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...