Селен - текст, введенный в одно и то же поле, даже если он предназначен для ввода в разных полях

Используя селен, при попытке ввода имени пользователя и пароля в форме входа в систему иногда текст вводится в одно и то же поле. Имя пользователя и пароль имеют уникальный идентификатор.

Для отправки ключей выполняются следующие шаги.

 sendKeys(By.id("login_username"), "abc");     
 sendKeys(By.id("login_password"), "efg");     

 public void sendKeys(By locator, String text) {
      WebElement element = findElement(locator);
      if(element != null) {
           element.clear();
           element.sendKeys();
      }
 }

 public WebElement findElement(By locator) {
      return wait(org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated(locator));
  }

 public WebElement wait(ExpectedCondition<WebElement> condition) {
      Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).pollingEvery(1, TimeUnit.SECONDS)
                .withTimeout(60, TimeUnit.SECONDS)
                .ignoreAll(Arrays.asList(NoSuchElementException.class, TimeoutException.class));
     return wait.until(condition);
 }

Но каким-то образом, при вводе текста, как имя пользователя, так и текст пароля вводятся в поле пароля. Это не всегда происходит, хотя. Не в состоянии понять, что может пойти не так или что проверить. Какие-либо предложения...

platform: Ubuntu 16.04.1 LTS 64-bit 
chromedriver version: 2.25
chrome browser version: 55.0.2883.87

Заранее спасибо.

1 ответ

sendKeys() Действие выполняет следующие шаги:

  • Получает координаты элемента
  • Клики по полученным координатам (с помощью действия мыши)
  • "Типы" текста (который будет получен любым элементом, на котором в данный момент находится фокус)

Он может пойти не так, если элемент не может быть сфокусирован при запуске действия (например, потому что он отключен), или если координаты меняются между получением координат и щелчком / фокусировкой элемента (потому что макет все еще меняется).

Другой распространенной причиной может быть действие onClick, подключенное к элементу, которое может привести к условиям гонки. Не видя реальной страницы, возможно, что после щелчков селена действие onClick все еще работает, когда текст набирается. В основном это выглядит так:

  • Селен клики
  • начинается действие onClick (элемент может быть сфокусирован только после его завершения)
  • Selenium начинает печатать (onClick еще не вернулся, поэтому неправильные элементы получают текст)
  • действие onClick завершается, но к тому времени Selenium также завершается.

В качестве решения вы можете попробовать сфокусировать элемент напрямую и подождать, пока он действительно не сфокусируется, перед отправкой ключей. Этот вопрос может быть полезен для этого случая.

Другие вопросы по тегам