Обрабатывать фокус Javascript при использовании sendKeys в WebDriver - PullRequest
1 голос
/ 24 марта 2012

Для веб-приложения довольно распространено использование Javascript для фокусировки на загрузке текстового поля. Например, на странице входа в систему мы можем использовать Javascript, чтобы сфокусироваться на поле имени пользователя.

При использовании WebDriver с FirefoxDriver я использую sendKeys для заполнения этих полей. Однако в большинстве случаев функция фокуса Javascript будет выполняться , в то время как WebDriver отправляет фактические символы, поэтому мой ввод для другого поля (например, поля пароля) является частичным, а оставшаяся часть переходит в поле фокуса.

Как мне справиться с этим делом? Насколько мне известно, API блокировки возвращается при загрузке содержимого страницы, а не после завершения выполнения Javascript, поэтому эта ситуация понятна. Тем не менее, я не думаю, что использование «Wait» является достойным решением, так как оно означает слишком много вмешательства в разработку тестов.

1 Ответ

0 голосов
/ 24 марта 2012

Я придумал три возможных решения, ни одно из которых не гарантированно работает:

  1. Возвращает ли javascript document.readyState "complete"? Если нет, то вы можете ждать этого после каждого click().
  2. Вы можете подождать, пока driver.switchTo().activeElement(); (который возвращает активный элемент) вернет ваше текстовое поле, и затем начнете вводить текст. Думаю, вам следует позвонить driver.switchTo().defaultContent(); и после этого, но я не уверен в этом. Аналогичный подход будет получать document.activeElement.
  3. Хм, это тоже немного глупо. Напишите свой собственный метод sendKeys, который находит элемент, запоминает его и затем отправляет один ключ из требуемой строки за раз. Поскольку WebDriver делает акцент на начале набора текста, он должен работать.
...