Java: Selenium Webdriver не удается отправитьKeys () при автоформатировании ввода - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу заполнить поле ввода на веб-сайте селена webdriver.поле ввода выглядит так:

<input type="text" pattern="[0-9,.]*" class="checkThousandSeparator hideNumberSpin" name="metal" tabindex="1" id="metal" value="0" onblur="updateVariables();" onkeyup="checkRessourceByType('metal'); updateVariables();" onkeypress="return submitOnEnter(event);">

Так что у меня никогда не было проблем с заполнением поля ввода раньше.но этот автоматически форматирует ввод, поэтому, если вы введете 24424, он автоматически сделает 24,424 из него.

Если я сейчас использую Webdriver для ввода значения, я могу ввести его (например, 4200) иполе ввода составляет 4.200 из него.но когда я отправляю форму, которая принадлежит полю ввода, она меняет значение на 0. Сумасшедшая вещь, если я ввожу значение ниже 1000, а поле ввода не нужно его форматировать, я могу предоставить правильное число.Кто-нибудь знает, почему?

что я уже пробовал:

  • сделать сон
  • сделать медленный ввод с sendKeys (так что только 1 символ, а затем 300 миллисекунд ожидания)

Но оба не помогли.вот мой код -

//doesn't work, form will submit a "0"
int met = 4200;
driver.findElement(By.id("metal")).sendKeys(Integer.toString(met));

//works, form submits the right value
int met = 200;
driver.findElement(By.id("metal")).sendKeys(Integer.toString(met));

Нет ошибок или чего-либо еще

Редактировать : Я забыл сказать: форма не может предоставить правильное значение, только еслиЯ ввожу значение с помощью селена Webdriver.если я ввожу значение вручную, форма всегда отправляет правильное значение, даже если оно> 1000.
Edit2 Solution : Ok.Вместо использования метода sendKeys () необходимо установить значение через JavaScriptExecuter.

//This works:
int met = 550000;
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('metal').setAttribute('value', '"+met+"')");

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

Поведение, которое вы описываете, звучит для меня как ошибка.Предполагая, что этого не происходит при вводе вручную, это может быть вызвано тем, что Selenium очень быстро «нажимает» на клавиши.

Может помочь небольшое ожидание после каждого нажатия клавиши:

String[] digits = "200".split("");
for (String digit : digits) {
    inputElement.sendKeys(digit);
    Thread.sleep(250);
}

Не зная реализации этих обработчиков, невозможно сузить причину.

0 голосов
/ 31 декабря 2018

Вы можете попробовать это,

int met = 4200;
driver.findElement(By.id("metal")).sendKeys("" + met);

, а также это,

String met = "4200";
driver.findElement(By.id("metal")).sendKeys(String.valueOf(met));

или

driver.findElement(By.id("metal")).sendKeys(Keys.NUMPAD4, Keys.NUMPAD2, Keys.NUMPAD0, Keys.NUMPAD0);

, а также используя JavaScript,

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('metal').value='4200';");

Попробуйте.

0 голосов
/ 31 декабря 2018

Вы можете удалить атрибут шаблона и атрибут класса, используя селен.Затем вы можете попытаться ввести желаемое значение.

Попробуйте его

...