首页 > 解决方案 > Java:输入自动格式时,Selenium Webdriver 无法 sendKeys()

问题描述

我想用 selenium 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的值并且输入字段不需要格式化,我可以提交正确的数字。有谁知道为什么?

我已经尝试过的:

但两者都没有帮助。这是我的代码 -

//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));

没有错误或任何东西

编辑:我忘了说:如果我使用 selenium Webdriver 输入值,表单只会无法提交正确的值。如果我手动输入值,表单总是提交正确的值,即使它 > 1000。
Edit2 解决方案:好的。需要通过 JavaScriptExecuter 设置值,而不是使用 sendKeys()-Method。

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

标签: javaseleniumwebdriversendkeys

解决方案


你可以试试这个

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';");

试试看。


推荐阅读