2

У меня очень простое приложение, которое включает TableViewController, в котором отображается таблица с несколькими пользовательскими ячейками с изображением, ярлыком и кнопкой, а когда вы нажимаете кнопку, появляется ActionSheet. Итак, в моем пользовательском java-скрипте (с использованием инструментов-UIAutomation) я хочу нажать кнопку в своей таблице (и я могу сделать это без каких-либо проблем), а затем, когда появится ActionSheet, я просто хочу нажать единственную кнопку (кнопка «Отмена») что он показывает.Как получить доступ к ActionSheet (и его кнопкам) в UIAutomation с помощью JavaScript?

И я не знаю, как это сделать должным образом. Так вот мой JS код:

var target = UIATarget.localTarget(); 
var app = target.frontMostApp(); 
var main = app.mainWindow(); 

main.tableViews()[0].cells()[1].buttons()["DetailsButton"].tap(); 
target.delay(5); 
main.actionSheet().elements()[0].tap(); 

И это сообщение я получаю:

Script threw an uncaught JavaScript error: 'undefined' is not a function (evaluating 'main.actionSheet()') on line 9 of New%20Script 

Я также попытался actionSheet().buttons()[0].tap(); - не помогло, продолжать получать ту же ошибку.

Я даже попытался получить доступ actionSheet по его accessibleLabel:

main.actionSheet()["CellNumberSheet"].elements()[0].tap(); 

Если это поможет, то это так, как я показываю свою actionSheet:

[actionSheet showInView:[UIApplication sharedApplication].keyWindow]; 

Иерархия элементов также, как представляется, верный.

enter image description here

Не нашли много полезной информации о нем в Интернете ... так что любая помощь будет оценена ...

ответ

1

На самом деле вам нужно использовать app.actionSheet(), чтобы получить лист действий.

См UIAApplication

app.actionSheet().elements()[0].tap(); 

Это должно работать

+0

Это берет меня немного дальше, хотя до сих пор не работает ... Теперь, когда я пытаюсь нажать на кнопку actionSheet в пути вы предложили, появляется другая ошибка: 'не удается выполнить действие над недопустимым элементом: UIAElementNil from target.frontMostApp(). actionSheet(). elements() [0] '... Также все методы, такие как' checkIsValid() ',' isEnabled() ',' isVisible() 'return False, когда я применяю их к моим actionSheet() и' actionSheet(). name() 'возвращает пустую строку (тогда как на снимке экрана в моем сообщении вы можете см. у него есть действительное имя «CellNumberSheet») ... – arrteme

+1

Это интересно, как насчет использования app.windows() [2].elements() [1] для доступа к таблице действий? – Sugre

+0

Последний способ, которым вы предложили получить доступ к ActionSheet, отлично работает, и все методы, такие как isVisible, checkIsValid и isEnabled, возвращают True. Хотя по-прежнему нельзя использовать кнопки actionSheet! Попробуйте 'app.windows() [2] .elements() [1] .elements() [0] .tap()' и 'app.windows() [2] .elements() [1] .buttons() [0] .TAP() '. Нет успеха, он выдает сообщение об ошибке «Не удается выполнить действие над недопустимым элементом». Временно используя решение для нажатия кнопок asctionSheet, как описано здесь: http://stackoverflow.com/a/5331896/3065769 – arrteme

0

Попробуйте использовать это:

//check that action sheet is on the screen 
    app.actionSheetIsValid(); 

//add some delay 
    target.delay(2); 

//check that the button is on the actionSheet 
    actionSheet.actionSheetButton("Cancel"); 

//add some delay 
    target.delay(2); 

//touch Exit button 
    actionSheet.tapActionSheetButtonByName("Cancel"); 
2

Если вы хотите, чтобы нажать на actionSheet вы должны использовать, как показано ниже:

var target = UIATarget.localTarget(); 
var app = target.frontMostApp(); 
var window = app.mainWindow(); 

target.frontMostApp().actionSheet().buttons()["Cancel"].tap(); 

Но если вы se window.actionSheet() он вернет ошибку.

6

На iOS8, кнопки действия листа и элементы просто не похожи на работу, так что я проверил в SparkInspector и использует представление коллекции в настоящее время:

Этот код нажмите на нижнюю кнопку, которая не отменить кнопка:

target.frontMostApp().actionSheet().collectionViews()[0].visibleCells()[0].tap()

+0

Это верно для iPhones, но на iPad мне приходилось обращаться к ActionSheet перед: window.popover(). Elements()) [0] .collectionViews() [0] .visibleCells() [«Зарегистрировать новый прибор»]. Tap(); –

 Смежные вопросы

  • Нет связанных вопросов^_^