Protractor изначально был создан для автоматизированного тестирования Angular-приложений, однако его возможности позволяют работать и с мобильными веб-приложениями, включая управление виртуальными клавиатурами на устройствах с iOS и Android. Работа с мобильной клавиатурой требует понимания особенностей взаимодействия с элементами ввода и асинхронного характера мобильных событий.
На мобильных устройствах активация текстового поля автоматически
вызывает виртуальную клавиатуру. В Protractor взаимодействие с такими
полями осуществляется с помощью стандартных методов WebDriver, таких как
sendKeys() и clear(). Важно учитывать, что
не все события клавиатуры сразу генерируются, поэтому
иногда необходимо использовать дополнительные действия для гарантии
корректного ввода.
const inputField = element(by.id('username'));
await inputField.click(); // активирует клавиатуру на мобильном устройстве
await inputField.clear(); // очищает поле
await inputField.sendKeys('test'); // ввод текста
Если поле ввода находится внутри динамически загружаемого компонента,
следует использовать ожидания
(ExpectedConditions) для надежного взаимодействия:
const EC = protractor.ExpectedConditions;
await browser.wait(EC.elementToBeClickable(inputField), 5000);
await inputField.sendKeys('mobileUser');
Прямое управление клавишами виртуальной клавиатуры в Protractor
ограничено, но с помощью sendKeys можно эмулировать нажатия
на специальные клавиши:
const inputField = element(by.css('input[name="password"]'));
await inputField.sendKeys(protractor.Key.ENTER); // эмуляция нажатия Enter
await inputField.sendKeys(protractor.Key.BACK_SPACE); // удаление последнего символа
Ключи, доступные через protractor.Key, позволяют
управлять Enter, Tab, Backspace, Escape, а также
навигацией по тексту (ArrowLeft, ArrowRight).
Это важно для мобильных форм, где некоторые поля могут автоматически
переключаться после нажатия Enter.
На мобильных устройствах клавиатура может сокращать видимую область экрана, что делает элемент недоступным для прямого взаимодействия. Для корректного ввода требуется предварительный скроллинг к элементу:
await browser.executeScript('arguments[0].scrollIntoView(true);', inputField.getWebElement());
await inputField.click();
await inputField.sendKeys('exampleText');
Использование scrollIntoView гарантирует, что элемент
окажется в видимой области и клавиатура не перекроет поле ввода.
Мобильные клавиатуры вызывают отложенные события ввода, особенно на Android и iOS. Для корректного тестирования следует использовать ожидания завершения анимации или появления текста:
await browser.wait(async () => {
const value = await inputField.getAttribute('value');
return value === 'expectedText';
}, 5000);
Это предотвращает ситуации, когда тест продолжает выполнение до того, как клавиатура завершила ввод.
click(), иначе клавиатура не появится.
Иногда помогает tap() через
browser.actions().await browser.actions().tap(inputField).perform();
await inputField.sendKeys('iOSUser');
sendKeys или использовать Appium
для прямого управления клавиатурой.Для более сложного управления мобильной клавиатурой часто используют Protractor в связке с Appium. Appium предоставляет API для скрытия/показа клавиатуры, работы с автозаполнением и переключением языков. Пример скрытия клавиатуры на Android:
await browser.driver.hideKeyboard();
Для iOS аналогично:
await browser.driver.hideKeyboard('Done'); // нажать Done на виртуальной клавиатуре
Это особенно важно для форм с множеством полей, где клавиатура может перекрывать следующий элемент ввода.
protractor.Key.scrollIntoView перед
взаимодействием.Работа с мобильной клавиатурой в Protractor требует сочетания стандартных методов WebDriver, ожиданий, эмуляции специальных клавиш и, при необходимости, интеграции с Appium для расширенного управления. Такое сочетание обеспечивает надежное и стабильное тестирование мобильных форм и ввода данных.