2012-05-11 3 views
4

Я пытаюсь автоматизировать клавиатуру с помощью UI Automation.target.frontMostApp(). Keyboard() не удалось найти ключ 'N'

target.frontMostApp().keyboard().typeString("INTERCOM") 

Но я получу эту ошибку после первого «Я» типизированных

target.frontMostApp().keyboard() failed to locate key 'N' 
Script threw an uncaught JavaScript error: target.frontMostApp().keyboard() failed to locate key 'N' 

У меня есть локализованные шведские клавиатуры.

Кто-нибудь знает, если это ошибка или что-то, что я пропустил?

+0

Возможно, возможно, что раскладка клавиатуры установлена ​​на «экзотический» язык с нелатинским алфавитом. Однако я сталкиваюсь с той же проблемой, что и с пробелом. Что еще более странно – Bgi

ответ

-1

У меня тоже была эта проблема, и я считаю, что это случай, когда строка набирается слишком быстро.

Кажется, что имена ключа изменяются в зависимости от состояния кнопки shift.If сдвиг включен, тогда клавиша называется «N», если сдвиг не включен, то это «n». уведомление, когда набирается строка, что кнопка переключения нажата до ввода буквы верхнего регистра. Ваш тест пытается нажать клавишу «N» до нажатия кнопки «Shift». Это не влияет на первую букву вашего предложения, потому что клавиатура имеет сдвиг для первой буквы.

Это также влияет на ввод строчного символа после символа верхнего регистра: символ нижнего регистра может быть напечатан, пока кнопка смены находится в процессе нажатия.

Я использую обходное правило ввода каждой буквы строки с помощью отдельных методов typeString().

for (i = 0; i < title.length; i++) 
{ 
    var strChar = title.charAt(i); 
    target.frontMostApp().keyboard().typeString(strChar); 
} 

Недостатком этого является то, что для ввода полной строки требуется намного больше времени.

Вы также можете посмотреть следующую ссылку, которая предлагает аналогичное решение, но использует метод app.keyboard(). Keys(). Tap() для каждого символа строки вместо метода typeString(). http://jojitsoriano.wordpress.com/2011/06/27/ios-ui-automation-typing-a-string-in-a-uiatextfield/

1
try{ 
    target.delay(1); 
    target.frontMostApp().mainWindow().textFields()[0].tap(); 
    target.delay(1); 
    target.frontMostApp().mainWindow().textFields()[0].setValue("INTERCOM"); 
} 
catch(err){ 
    target.delay(1); 
    target.frontMostApp().mainWindow().scrollViews()[0].textFields()[0].tap(); 
    target.delay(1); 
    target.frontMostApp().mainWindow().scrollViews()[0].textFields()[0].setValue("INTERCOM"); 
} 
+0

К сожалению, это решение не приводит к вызову методов делегата для ввода текста/редактированияDidChange. Как правило, люди стремятся к «типизации» решения. – Prometheus

2

Это может помочь:

var vKeyboard = target.frontMostApp().keyboard(); 
vKeyboard.setInterKeyDelay(0.1); 
vKeyboard.typeString("INTERCOM"); 

По умолчанию эта задержка устанавливается с 0.03 секунды. Этого недостаточно для того, чтобы ваше приложение обновляло ключи на клавиатуре. Увеличение этого таймаута между определяющими ключами для метода клавиатуры типаString поможет вам. Нет описания для setInterKeyDelay на странице ссылки UIAKeyboard, но этот метод доступен для UIAKeyboard. Также я не уверен в других языках. Я не знаю, позволяет ли typeString вводить на другие языки, но это 100% работает для английской клавиатуры для iOS 5.x.

+0

Хорошо, я попробую это в следующий раз, когда я использую автотестирование пользовательского интерфейса. – bollhav

+0

Я пробовал это. На самом деле клавиши нажимаются медленнее, но ошибка сохраняется. – lucianoenrico

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