Цель теста
У меня есть угловое приложение с формой, которую я хочу проверить.
Форма состоит из двух полей ввода даты. Я пытаюсь запустить тест e2e для проверки формы.
Тест 1
Мой первоначальный способ сделать это был прямо, установить значение так же, как это делается с текстовыми полями:
webDriver.findElement(By.cssSelector(selector)).sendKeys("2018-11-02");
К сожалению, дата не копируется правильно.
Обратите внимание, что я пытался использовать другие форматы, и это ни к чему не привело.
Тест 2
Я пытался использовать Javascript для обновления полей.
JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("document.querySelector('" + selector + "').value='" + value + "'");
У меня был больший успех с этим, однако угловой дайджест, похоже, не обнаруживает изменений и не обновляет реактивную форму.
Я пытался запустить угловое обнаружение с помощью Javascript, но это не сработало, так как мы запускаем тест в тестовой среде, в которой установлена соответствующая версия углового.
Я попытался нажать на родительский компонент и запустить:
ng.probe(getAllAngularRootElements()[0]).injector.get(ng.coreTokens.ApplicationRef).tick()
Я также получил родительский компонент на входе, используя document.querySelector, а также используя $ 1, и передал его в ng.probe, что также ни к чему не привело.
Другие решения:
Я проверил онлайн и попробовал различные решения, такие как:
- Очистка поля перед запуском функции sendKeys.
Использование Javascript для удаления атрибута readonly
document.querySelector ('"+ selector +"') .removeAttribute ('readonly', 0))
- Использование разных форматов даты.
- Нажатие на вход после обновления его значения.
Может кто-нибудь помочь решить эту проблему? Я проверил несколько потоков GitHub, и похоже, что у нескольких людей возникла та же проблема.
Версии программного обеспечения:
- Селен-Ява 3.13.0
- Chrome версия: версия 71.0.3578.98
- Угловой 6
Обратите внимание:
Невозможно использовать транспортир, поскольку Java уже используется в целях тестирования.