Как смоделировать щелчок мыши на UIWebView в Какао для iPhone? - PullRequest
2 голосов
/ 24 апреля 2010

Я пытаюсь настроить автоматические юнит-тесты для приложения iPhone. Я использую UIWebView и мне нужно имитировать нажатия на разные ссылки. Я пытался сделать это с помощью JavaScript , но он не дает такой же результат, как когда я вручную нажимаю на ссылки. Основная проблема связана со ссылками, для которых установлено свойство target.

Когда вы вручную нажимаете на стандартную всплывающую ссылку (например, <a href="http://example.com" target="_blank">), UIWebView игнорирует событие щелчка и не перемещается ни к чему. Если затем попытаться автоматически щелкнуть эту же ссылку с помощью метода JavaScript dispatchEvent(), UIWebView полностью проигнорирует атрибут target и откроет ссылку в обычном режиме на текущей странице.

Мне нужно автоматическое модульное тестирование, чтобы получить точный такой же результат, как и при ручном нажатии на ссылку.

Я считаю, что единственный способ для правильной работы этого автоматизированного модульного теста - симуляция щелчка мышью по определенной координате x / y (то есть, где находится ссылка). Поскольку модульное тестирование будет использоваться только для внутреннего использования, частные вызовы API подойдут.

Похоже, это должно быть возможно, поскольку приложение для iPhone isimulate , похоже, делает нечто подобное.

Есть ли способ сделать это в рамках?

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

Ответы [ 4 ]

1 голос
/ 11 мая 2010

Не могли бы вы сохранить местоположения щелчков в структуре данных, которую вы используете в своих тестах, а затем смоделировать стандартные события касания, как описано здесь описано здесь

--- Просто заметил, что вам не очень повезло с примером по этой ссылке. Единственные другие варианты, которые я могу предложить, - это манипулировать html при запуске из теста, чтобы заменить любые ссылки _target (вы знаете, что UIWebView правильно обрабатывает их при щелчке вручную, поэтому я думаю, что для модульного теста вполне подойдет небольшая ошибка).

Отличное прохождение в этот ответ

1 голос
/ 06 мая 2010

Правильный способ сделать это - создать собственный UIEvent, а затем опубликовать это событие в своем экземпляре UIApplication с помощью метода -sendEvent:.

Однако, по-видимому, не существует публичного API для создания UIEvent, поэтому вам может не повезти.

1 голос
/ 24 апреля 2010

Полагаю, вы могли бы смоделировать прикосновения, вызвав методы touchesBegan / touchesEnded непосредственно в UIView (проверьте класс UIResponder).

0 голосов
/ 06 мая 2010

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

Частные вызовы для записи и отправки событий являются частью GraphicServices / GSEvent.h со стандартным использованием на ваш страх и риск. Каждый UIEvent на самом деле является UIInternalEvent, который имеет ссылку на __GSEvent, поэтому для записи вы можете использовать свойство _gsEvent для получения основного события.

@property (nonatomic,assign) struct __GSEvent *_gsEvent;

Я не использовал ничего из этого, но похоже, что GSSendSystemEvent будет хорошим началом.

...