Как UIAutomation определяет, является ли UIAElement.isVisible () - PullRequest
5 голосов
/ 13 января 2012

У меня есть представление со следующей структурой:

GrandView
-Parent View1
-Parent View2
--Child View1
--Child View2

Дочерние представления занимают почти все границы Parent View2, но все еще остается некоторое пространство по краям. Я могу выбрать Parent View2 в симуляторе с инспектором доступности, если щелкну по краям. Я также могу нажать Parent View2 в UIAutomation, если я использую:

tapWithOptions({tapOffset:{x:0.15, y:0.95}});

Однако мои звонки на isVisible() всегда возвращают 0. Я ожидаю, что, если я могу коснуться элемента или выбрать его с помощью инспектора специальных возможностей, он должен вернуть 1.

Как UIAutomation определяет, является ли UIAElement видимым?

Ответы [ 2 ]

0 голосов
/ 29 января 2012

Каждая операция, выполняемая с элементом, имеет тайм-аут.Это не очевидно из документации Apple, но если вы посмотрите на: setTimeout , это говорит нам:

Значение времени ожидания устанавливает льготный период для разрешения объекта.Если объект, представляющий элемент пользовательского интерфейса, становится доступным в течение льготного периода, делается попытка создать экземпляр этого объекта из информации, хранящейся в приборе.

setTimeout само по себе просто меняет значение по умолчанию (как это делаютнажмите и поп).То, что вы действительно хотите сделать, - это выполнить свое действие в своем представлении и завершиться с ошибкой по истечении времени ожидания, если оно никогда не станет доступным (по умолчанию время ожидания составляет 5 секунд).Сессия WWDC 2010 «Автоматическое тестирование пользовательского интерфейса с помощью приборов» немного углубляется в это: она доступна на странице ADC WWDC 2010 , как с видео, так и со слайдами.В вашем случае вы хотите выполнить нажатие () на вашем представлении.Если по какой-либо причине это представление не будет доступно UIAutomation в течение 5 секунд, вы должны увидеть исключение.Поэкспериментируйте с изменением времени ожидания, выполнив:

var oldTimeout = target.timeout(); target.pushTimeout(10);

перед вашим кодом и

target.popTimeout(oldTimeout);

после.

0 голосов
/ 28 января 2012

Если это UIView, ему следует управлять свойством hidden. Если это не представление, а контейнер, оно должно управляться accessibilityElementsHidden.

В общем, вы не хотите использовать это для UIAutomation. Вместо этого, что бы вы ни собирались делать в представлении - в данном случае, нажмите () - продолжайте и сделайте это, и пусть система выдаст ошибку, если она истечет. В целом, это модель, которой вы хотите следовать в своих сценариях, а не проверять, доступно ли что-то первым. Sine UIAutomation - это DOM-сценарий для информации UIAccessibility, когда происходят такие вещи, как переходы анимированных представлений, которые становятся не синхронизированными. Иногда скрипт выполняется быстрее, чем оживляет пользовательский интерфейс, а иногда наоборот! waitForInvalid может быть решением для вас.

Библиотека Алекса Воллмера tuneup.js для UIAutomation значительно упрощает написание тестов и расширяет их. https://github.com/alexvollmer/tuneup_js

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