Пытаться
touch("UITextField index:x")
где x == your index
.
Также, пожалуйста, обновитесь до calabash 0.17.0 :)
Объяснение
Среда Calabash состоит из клиента и сервера. Сервер работает на устройстве/симуляторе как часть приложения и получает команды/запросы от клиента. В этом случае клиент — это ruby-интерфейс, через который вы взаимодействуете с приложением.
Клиент отвечает за отправку на сервер достаточной информации для выбора объектов, на которых будут выполняться жесты. После выполнения жестов/запросов результаты отправляются обратно клиенту в виде json/хэшей, что вы и видите в консоли. Различие важно: сервер выполняет запросы, а клиент — нет.
К тому времени, когда вы видите результаты запроса/жеста в консоли irb, он уже был выполнен: возвращаемый json просто представляет состояние представлений, не сами фактические представления.
Итак, когда вы бежите
touch("UITextField")[index]
Это на самом деле эквивалентно
touch_results = touch("UITextField")
touch_results[index]
В первой строке touch_results
получает json-представление элементов, затронутых выполнением touch
результатов запроса "UITextField"
, что означает, что событие touch
уже завершилось к тому времени, когда вы пытаетесь получить доступ к результатам с помощью touch_results[index]
.
Другой способ думать об этом таков: учитывая res = touch(query)
, query
— это часть, используемая для указания фактических представлений, а res
— это просто json, который представляет состояние этих представлений/результатов запроса или жеста.
В заключение
Если вам нужна дополнительная конкретизация запроса, спецификаторы должны находиться внутри запроса. Например.,
touch("all UIScrollView UITextField marked:'some text' index:2")
(это будет искать все UIScrollViews , найдет все UITextFields внутри них, которые содержат текст, соответствующий 'some text' и вернуть третий из таких результатов).
Полное объяснение синтаксиса языка запросов см. в документах а>.
person
Christopher Fuentes
schedule
04.01.2016